我真的很新的 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;
函数中仍然得到同样错误 = \
任何帮助或提示会帮助谢谢你。
只是简单地返回 boolValue
的 NSNumber
实例,而不是提取其整数值,它相比 1,和返回 YES
或 NO
在此基础,如你整个的方法,可以减少︰
- (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