[objective-c]-(bool) 不返回

发布时间: 2017/3/27 4:20:01
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我真的很新的 Xcode 和 iPhone 的发展。我写一个函数我 appDelegate.m 文件称为 getISlogged; 。它看起来像这样︰

- (BOOL) getISlogged {
    NSUserDefaults *usenow = [NSUserDefaults standardUserDefaults];
    NSNumber *islog = nil;
    if(usenow){
        islog = [usenow objectForKey:@"is_log"]; // should equal 1 or 0...
    }

    UIAlertView * alert1 = [[UIAlertView alloc] initWithTitle:@"works" message:@"test1" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil];
    [alert1 show];
    if (islog == [NSNumber numberWithInt:(1)]) {
       return YES;
    } else {
        return NO;
    }
}

好吧,现在我把它叫做从我 viewController.m 就像这样︰

SWGAppDelegate *appDelegate = (SWGAppDelegate *)[[UIApplication sharedApplication]delegate];
NSString *islog = @"no";
if(appDelegate.getISlogged){
   islog=@"yes";
}

现在当我运行它的时候我总是得到 Thread 1: breakpoint 2.1 和我也不知道做什么用的。我有试着删除所有代码,留下的只 return YES; 函数中仍然得到同样错误 = \

任何帮助或提示会帮助谢谢你。

解决方法 1:

只是简单地返回 boolValueNSNumber 实例,而不是提取其整数值,它相比 1,和返回 YESNO 在此基础,如你整个的方法,可以减少︰

- (BOOL) getISlogged {
    return [[[NSUserDefaults standardUserDefaults] objectForKey:@"is_log"] boolValue];
}

如果用户默认值中不存在的键,此方法的结果将是 NO

另一种"代码味道"是您将布尔值分配给一个字符串 (与 @"yes"@"no" 被分配到 islog )。有没什么错,如果你只是打算将字符串在某个地方,例如写入日志,但如果您计划使用此变量来确定是否将写入到日志,然后你应该相反就 BOOL 。字符串是用于存储文本,就是这样。

最后,请记住,在 Objective-C == 运算符比较对象标识 (即,它证实两个引用指向相同的对象),它不比较对象是否相等。您可以使用内置的 isEqual: 方法为 NSNumber 或"提取"装箱的值并比较反对另一个装箱的值,例如要么这帮你做到︰

if ([islog isEqualToNumber:[NSNumber numberWithInt:1]])
    // do something

// or

if ([islog intValue] == 1)
    // do something
赞助商