2011-12-08 2 views
3
-(void)saveDictionary:(int)counter 
    { 
     NSString *path=[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
     NSString *test = [NSString stringWithFormat:@"%d", counter]; 
     [theDictionary setObject:test forKey:@"Counter"]; <---- Error 
     [theDictionary writeToFile:path atomically:YES]; 
    } 

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    { 
     [self saveDictionary:[_viewController counter]]; 
    } 

오류 "인식 할 수없는 선택기 인스턴스로 전송"NSMutableDictionary

-[NSCFString setObject:forKey:]: unrecognized selector sent to instance 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString setObject:forKey:]: unrecognized selector sent to instance 

내가 PLIST에서 키 "카운터"의 값을로드 할 수 있습니다. 동일한 "카운터"키의 새 값을 저장하려면 ... 오류. 도움, 시간을 보냈습니다. 그것을 발견

-(void)initDictionary { 
    if (theDictionary == nil) { 
     NSString *path=[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
     theDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
     theString = [theDictionary objectForKey:@"Counter"]; 
    } 
} 

:

여기

안녕

theDictionary를 초기화하는 코드입니다!

theString = [[NSString alloc] initWithFormat:[theDictionary objectForKey:@"Counter"]]; 

감사합니다!

답변

3

theDictionary에 저장된 오브젝트가 실제로 NSString이고 NSString 인 것은 -setObject:forKey이라는 메소드가 없기 때문입니다. 코드에 theDictionary이 할당되어있는 곳을 확인하고 실제로는 NSMutableDictionary인지 확인하십시오.

0

'theDictionary'는 사전이 아닙니다. 대부분 이전에 릴리스되었고 일부 NSString이 대신 사용되었습니다.

ARC를 사용하고 있습니까? 'TheDictionary'는 어디에 정의되어 있습니다.

그리고 이걸 추적하려면 좀비 장비를 사용해 보셨습니까? 도움이 될 것입니다.

0

속성 theDictionary은 실제로 사전이 아니지만 문자열 (NSString) 인 것으로 보입니다. theDictionary은 어디에 정의되어 있습니까?

1

theDictionary 같은 소리는 NSMutableDictionary 대신 문자열입니다. 그 사이에 어디에서 그것이 창조되었고 그 일이 일어 났습니까?

3

초기화를 확인하십시오. 이렇게 할 수 있습니다.

NSMutableDictionary dictoForSyncing * = [있는 NSMutableArray ALLOC] INIT];

0
NSMutableArray *myObjFromFile = ....; 
NSMutableDictionary *tmpDictFromFile = 
    [[[myObjFromFile objectAtIndex:xx] mutableCopy]; mutableCopy]; 

[tmpDictFromFile setObject:"YOUR OBJECT" 
        forKey:"YOUR KEY"];