布尔值和核心数据

时间:2013-09-08 16:02:56

标签: objective-c core-data boolean

我在实体中有布尔值,值都显示为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];

2 个答案:

答案 0 :(得分:3)

默认情况下,布尔值在托管对象中表示为NSNumber个对象。 所以你可以按原样使用它:

NSNumber *one = ENT_status.status_one;

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

BOOL one = [ENT_status.status_one boolValue];

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

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

答案 1 :(得分:0)

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

从object:

中检索布尔值
BOOL myBool = [[myManagedObject valueForKey:@"myKey"] boolValue];

并设置新值:

myManagedObject.myKey = @YES;