【发布时间】:2014-10-16 15:20:21
【问题描述】:
我在NSUserDefaults 中使用dispatch_once 在AppDelegate 中存储NSMutableArray。
代码在AppDelegate.m的applicationDidFinishLaunchingWithOptions:中
static dispatch_once_t once;
dispatch_once(&once, ^ {
[[NSUserDefaults standardUserDefaults] setObject:[[NSMutableArray alloc] init] forKey:@"seenTutorial"];
[[NSUserDefaults standardUserDefaults] synchronize];
});
我知道实际数组没有任何问题,因为当我尝试将其打印到控制台时,它正在正确打印其内容。例如:
代码在viewDidAppear
NSMutableArray *usersWhoHaveSeenTutorial = [[NSUserDefaults standardUserDefaults] objectForKey:@"seenTutorial"];
[usersWhoHaveSeenTutorial addObject:currentUserID];
[[NSUserDefaults standardUserDefaults] setObject:usersWhoHaveSeenTutorial forKey:@"seenTutorial"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"ARRAY WITH USER IDs: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"seenTutorial"]);
输出:
2014-10-16 16:14:05.720 Unitu[71969:4552403] ARRAY WITH USER IDs: (
5184
)
但是,如果我尝试使用 containsObject: 检查某个元素是否包含在数组中,则会分配布尔值 (null) 而不是 YES 或 NO。
代码在viewDidAppear:
BOOL hasSeenTutorial = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"seenTutorial"] containsObject:currentUserID];
NSLog(@"Has user seen tutorial? %@", hasSeenTutorial);
输出:
2014-10-16 15:59:38.102 App[71662:4542538] Has user seen tutorial? (null)
我觉得我的逻辑中有一个我似乎无法弄清楚的缺陷。
提前致谢!
【问题讨论】:
标签: objective-c null boolean