BOOL值为64位

时间:2014-05-04 12:07:44

标签: ios objective-c 64-bit

我的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

有人可以告诉我该怎么办?

谢谢大家......

1 个答案:

答案 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,并且应选择正确的分支。