- (布尔)没有回来

时间:2012-05-13 20:26:34

标签: iphone objective-c ios xcode

我是Xcode和iPhone开发的新手。我在名为appDelegate.m的{​​{1}}文件中编写了一个函数。它是这样的:

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但我仍然得到相同的错误= \

任何帮助或提示都会有所帮助。

3 个答案:

答案 0 :(得分:9)

只需返回boolValue实例的NSNumber,而不是提取其整数值,将其与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

答案 1 :(得分:5)

if (islog == [NSNumber numberWithInt:(1)])

那是错的。 (它比较了它们的地址而不是它们的值。)

使用:

if ([islog intValue] == 1)

代替。

答案 2 :(得分:0)

将其称为方法而非财产:

if([appDelegate getISlogged]){

(或者将其声明为app委托中的属性。)