2

我在一个实体中有布尔值,这些值都显示为 0。这些值被获取,无论我总是得到一个 TRUE 值。这是代码,问题可能出在最后两行代码。

我究竟做错了什么?

-(NSInteger)getStatus:(NSString*)nameID;
{

 **//Fetch Request**

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity =
        [NSEntityDescription entityForName:@"status"
                    inManagedObjectContext:[self managedObjectContext]];
                                        [fetchRequest setEntity:entity];

    NSPredicate *predicate = [NSPredicate
                      predicateWithFormat:@"id_Name = %@", nameID];
                      [fetchRequest setPredicate:predicate];

    NSError *error = nil;
    NSArray *fetchedObjects = [[self managedObjectContext]  executeFetchRequest:fetchRequest error:&error];
    if (fetchedObjects == nil) {

    }

    **//Values**

    status *ENT_status;
    ENT_status = [fetchedObjects objectAtIndex:0];

    //Either way, both these lines return YES when it would be NO
    //------------------------------------------------------------------
    BOOL one = ENT_status.status_one;
    NSNumber *two   = [NSNumber numberWithBool:ENT_status.status_two];
4

2 回答 2

3

默认情况下,布尔值表示为NSNumber托管对象中的对象。因此,您可以按原样使用它:

NSNumber *one = ENT_status.status_one;

或将其转换为普通(标量)BOOL

BOOL one = [ENT_status.status_one boolValue];

(在您的代码中,指针 ENT_status.status_one始终被解释为YES。)

或者,您可以在 Xcode 中创建托管对象子类时使用“使用原始数据类型的标量属性”选项。

于 2013-09-08T16:06:13.887 回答
0

我知道它有点晚了,可能没有人再使用Objective-C了,但我遇到了这个问题,对我有用的是:

从对象中检索布尔值:

BOOL myBool = [[myManagedObject valueForKey:@"myKey"] boolValue];

并设置新值:

myManagedObject.myKey = @YES;
于 2018-04-12T13:36:25.087 回答