【问题标题】:Objective-C: BOOL being returned as (null) using containsObjectObjective-C:使用 containsObject 将 BOOL 返回为(null)
【发布时间】:2014-10-16 15:20:21
【问题描述】:

我在NSUserDefaults 中使用dispatch_onceAppDelegate 中存储NSMutableArray

代码AppDelegate.mapplicationDidFinishLaunchingWithOptions:

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) 而不是 YESNO

代码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


    【解决方案1】:

    阅读格式说明符(请参阅文档中的链接以获取 NSString stringWithFormat:)。

    BOOL 不是对象。您不能使用%@ 记录它。请改用%d

    NSLog(@"Has user seen tutorial? %d", hasSeenTutorial);
    

    这将记录0(否)或1(是)。

    或者你可以这样做:

    NSLog(@"Has user seen tutorial? %@", hasSeenTutorial ? @"YES" : @"NO");
    

    这将根据BOOL 值记录字符串。

    顺便说一句-您的原始代码记录了(null),因为BOOL 的值NO 确实是0。并且使用%@ 正在寻找一个对象指针。 BOOL 值的0 被解释为nil 指针,因为nil 实际上也只是0。如果您的BOOL 值为YES,则应用程序可能会崩溃,因为该应用程序会尝试在内存地址1YES 的值)上的任何对象上调用description 方法。

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2021-05-02
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多