【问题标题】:Boolean values and core data布尔值和核心数据
【发布时间】:2013-09-12 04:53:46
【问题描述】:

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

【问题讨论】:

    标签: objective-c core-data boolean


    【解决方案1】:

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

    NSNumber *one = ENT_status.status_one;
    

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

    BOOL one = [ENT_status.status_one boolValue];
    

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

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

    【讨论】:

      【解决方案2】:

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

      从对象中检索布尔值:

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

      并设置新值:

      myManagedObject.myKey = @YES;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多