1

こんにちは私はNSUserDefaultsに配列を保存しようとしていますが、問題が発生しています。このメソッドは、NSUSerDefaultsに格納する配列に格納するNSDictionaryを受け入れます。問題は、mutableCopyを作成すると、NSMutable配列型ではなく、辞書と表示されることです。このメソッドはNSUserDefaultsを呼び出すのが初めてなので、エラーが発生している理由がわかりません。これがコードのおかげです

+(void) getRecentPhoto:(NSDictionary *)recentPhoto{

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
 //stores it as a dictionary? error happens here
NSMutableArray* recentPhotos = [[defaults objectForKey:@"recentPhoto"] mutableCopy];
NSLog(@"%@", [recentPhotos class]);
if(!recentPhotos) recentPhotos = [NSMutableArray array];
BOOL copy = NO;

//these will crash the program
NSLog(@"%@", [[recentPhotos objectAtIndex:0] objectForKey:@"id"]);
NSLog(@"%@", [recentPhoto objectForKey:@"id"]);

 //this checks if it has been stored before by using an id key
for(int i =0; i < [recentPhotos count]; i++){

    if ([[[recentPhotos objectAtIndex:i] objectForKey:@"id"] isEqualToString:[recentPhoto objectForKey:@"id"]] ) {
        copy = YES;
    }
}
if(copy ==NO)
[recentPhotos addObject:recentPhoto];
[defaults setObject:recentPhoto forKey:@"recentPhoto"];
[defaults synchronize];


}

これはエラーです

 NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector
4

1 に答える 1

2

問題は、このメソッドの最後にrecentPhoto、辞書である を、recentPhotos保存したい可変配列ではなく、ユーザーのデフォルトに保存しようとすることだと思います。

recentPhoto実際、このメソッドはユーザーのデフォルトに保存されていないため、最初にこのメソッドを呼び出したときにクラッシュすることはないと思います。しかし、その後になります。

于 2012-08-05T23:09:06.237 に答える