【发布时间】:2016-06-08 18:39:02
【问题描述】:
我的应用程序将 NSData(包含书签文件引用)列表保存到 NSUserDefaults,在应用程序过程的任何时候都以某种方式:
NSMutableArray *bookmarkedURLs = [[NSMutableArray alloc] init];
[bookmarkedURLs addObject:bookmark]; // 'bookmark' is a NSData object
[[NSUserDefaults standardUserDefaults] setObject:bookmarkedURLs forKey:@"AppBookmarks"];
[[NSUserDefaults standardUserDefaults] synchronize];
当应用程序启动时,我检查了 NSUserDefaults 以填充保存的 NSData 列表:
bookmarkedURLs = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppBookmarks"] mutableCopy];
if (bookmarkedURLs.count == 0)
{
bookmarkedURLs = [[NSMutableArray alloc] init];
NSLog(@"INITIALIZED");
}
else
{
NSLog(@"STORES NSDATA LIST");
....
}
我遇到的问题可以按以下步骤解决:
- “AppBookmarks”键没有保存 NSUserDefaults 数据
- 通过“AppBookmarks”键将 NSData 保存到 NSUserDefaults
- 重新启动应用程序
- 应用程序尝试从 NSUserDefaults 的“AppBookmarks”键填充 NSMutableArray,但始终找到 0 条记录
- 我再次将新的 NSData 保存到“AppBookmarks”键
- 重新启动应用程序
- 应用程序尝试从“AppBookmarks”填充 NSMutableArray,这一次它找到了保存的记录。
- 此后任何重新启动应用程序或添加到“AppBookmarks”的新 NSData 都不会失败
因此,只要没有保存数据到 NSUserDefaults 并且我保存了一个值,它就不会第一次加载或保存。此后,任何保存和加载的尝试都可以正常工作。
【问题讨论】:
-
您确定书签是 NSURL 对象吗?据我所知,NSUserDefault 仅适用于包含 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary 的数组。
-
谢谢指点。我纠正了我的问题。
-
尝试更改 bookmarkedURLs = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppBookmarks"] mutableCopy]; with: bookmarkedURLs = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"AppBookmarks"]];
-
我不认为这是我们如何加载的问题 - 因为在 first 尝试失败后现有进程可以正常工作。从第二次开始保存和加载效果很好。
标签: objective-c nsmutablearray nsuserdefaults nsdata mac-app-store