我的64位IOS仿真存在问题..
odendi是我的CoreDate中的BOOL值。
这是我的实体类文件。
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Fatura, Kart;
@interface Odeme : NSManagedObject
@property (nonatomic, retain) NSNumber *odendi;
我有一个按钮。当用户点击此按钮时,此代码应该运行;
if (odeme.odendi == [NSNumber numberWithInt:1]) {
odeme.odendi = [NSNumber numberWithBool:NO];
}
else
{
odeme.odendi = [NSNumber numberWithBool:YES];
}
NSLog(@"%@",odeme.odendi);
完美地使用32位IOS仿真。但是没有64位工作。当我点击这个按钮4次。它应该 NSLog 0 1 0 1 我试图发送
odeme.odendi = [NSNumber numberWithLong:1];
它没有用。
这是64位IOS 7.0 Iphone模拟器NSLog;
2014-05-04 15:15:06.971 ProjectName [5314:60b] 1
2014-05-04 15:15:07.868 ProjectName [5314:60b] 1
2014-05-04 15:15:08.662 ProjectName [5314:60b] 1
2014-05-04 15:15:08.662 ProjectName [5314:60b] 1
这是32位IOS 7.0 Iphone Simulation NSLog;
2014-05-04 15:22:01.878 ProjectName [5368:60b] 1
2014-05-04 15:22:02.770 ProjectName [5368:60b] 0
2014-05-04 15:22:04.523 ProjectName [5368:60b] 1
2014-05-04 15:22:05.399 ProjectName [5368:60b] 0
有人可以告诉我该怎么办?
谢谢大家......
答案 0 :(得分:2)
我的第一个想法,如果odendi
应该代表一个BOOL,那么为什么不把它当作一个呢?
if ([odeme.odendi boolValue]) {
odeme.odendi = @NO;
} else {
odeme.odendi = @YES;
}
甚至消除if-else
结构。
odeme.odendi = [NSNumber numberWithBool:![odeme.odendi boolValue]];
或者正如马丁为同一陈述提出了一些不同的语法:
odeme.odendi = @(![odeme.odendi boolValue]);
不要错过这个感叹号。
鉴于这似乎适用于32位而不是64位,我怀疑这可能是问题所在:
if (odeme.odendi == [NSNumber numberWithInt:1])
这就是为什么你应该在每个分支中放置一个日志,而不是在它下面。它会让你知道你的if
评估错误,问题就在这里,而不是在任何一个分支内。
您可以尝试[NSNumber numberWithInteger:1]
,这在32位和64位之间是不同的。我不知道这是否真的有效。但是,在一天结束时,你说odeme.odendi
是一个BOOL。它应该这样使用。不要将它与数字进行比较。不要将其与[NSNumber numberWithBOOL:YES]
或@YES
进行比较。只需获取BOOL值即可。它将评估为YES或NO,并且应选择正确的分支。