2010-11-30 6 views
3

그래서 UserDefaults에 사용자 이름이 저장되었습니다. 웬일인지, 나는 이상한 행동을하고있다.NSUserDefaults의 개체가 출시 되나요?

나는 사용자 이름을 기반으로 서버에서 일부 데이터를 가져오고 가져 오는 데이터 컨트롤러가 있습니다.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

userID = [prefs stringForKey:@"username"]; 

이 처음 몇 시간에 대한 잘 작동하지만 내가 어떤 임의의 물건을하고 시도하고 뷰를 다시로드 다시 이동 한 후,이 충돌합니다. 그것은 :

-[CFString retain]: message sent to deallocated instance 0x4b18ff0 

이것은 NSLog 줄에서 멈추고 있기 때문에 이상합니다. 아무도 전에 이것을 보았거나 그것이 일어날 수있는 이유를 알고 있습니까 ??

답변

6

사용자 ID를 어떻게 정의 했습니까? 그것은 유지와 속성이 있다면 당신은 당신의 문자열이 자동으로 유지됩니다 이런 식으로

self.userID = [prefs stringForKey:@"username"];

호출해야 때문이다. stringForKey에서 반환 된 문자열은 자동으로 변환됩니다.

+0

그래, 문제가있는 것 같습니다. 더 이상 충돌하지 않습니다. 한숨, 내게 두통을주고 있었던 것은 약간의 감독처럼 보입니다. 도움 Nava에 감사드립니다. :) – gabaum10

+0

도움이된다면 정답으로 표시해주세요. 감사! –

+1

내가 권 해낼 수있는 한 빨리. 그것은 5 분을 기다리게합니다. 너무 빨랐어! ;) – gabaum10

0

stringForKey는 보유하지 않는 자동 릴리스 객체를 반환합니다.이 메소드는 해당 메소드가 끝나면 곧 해제됩니다.

수동으로 지정하거나 보유 설정이있는 속성 선언을 사용하여 해당 문자열을 유지해야합니다.

그리고 나서 어느 시점에서 해제해야합니다 (최소한 dealloc에서).

+0

그래, 그게 내가해야만하는거야. 그것이 유지되지 않고 있다는 것을 깨닫지 못했습니다. 명시 적으로 self.userID를 말하지 않으면 저장되지 않고 있습니다. 응답 주셔서 감사합니다. – gabaum10