Core Data中的保存字符串返回<null>和字符串。当α</空>

时间:2012-06-20 15:40:48

标签: iphone objective-c ios core-data

我正在保存来自MultableArray中的数据库然后在CoreData中的值:

 NSMultableArray *mutary = [[NSMultableArray alloc] init];
      NSManagedObjectContext *context = [app managedObjectContext];
    for(int n=0; n<[AttributeArray count]; n++)
    {

    [mutary addObject:[[AttributeArray objectAtIndex:n] objectForKey:@"AttributName"]];
    NSLog(@"%@", mutary);
}
attributeString = [mutary componentsJoinedByString:@","];

 raume = [NSEntityDescription insertNewObjectForEntityForName:@"Raum" inManagedObjectContext:context];

raume.raumattribut = attributeString;

 if (![context save:&error]) {
 NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
 abort();

}

MultableArray的NSLog输出是:

    2012-06-20 17:21:00.047 book-app[31984:15803] (
    A7OVERHEAD,
    Beamer
)

到目前为止,它的工作正确。数据库中的两个预期值现在位于Array中。 现在我从CoreData获取这些属性:

    NSManagedObjectContext *context = [app managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Raum" inManagedObjectContext:context];
    [request setEntity:entity];
    NSError *error = nil;
    NSArray *events = [context executeFetchRequest:request error:&error];

for (Raum *att in events)
    {
     stringAttribute = [[events valueForKey:@"raumattribut"] componentsJoinedByString:@","];
     NSLog(@"ATTRIBUTE: %@", stringAttribute);
    }
}

到目前为止一切顺利。但是,如果我现在看看我的NSLog输出:

2012-06-20 17:21:00.055 book-app[31984:15803] ATTRIBUTE: <null>,A7OVERHEAD,Beamer

CoreData正在返回,然后是两个值。它来自哪里?

有人可以帮忙吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

编辑:经过一番调查和澄清(见评论),这是我的答案: 在NSArray上调用valueForKey会返回一个数组,其中每个元素都是通过在原始数组的每个成员上调用valueForKey来创建的。这意味着您的输出表明您的获取请求返回了3个总对象,而第一个没有设置raumattribut属性。

以前的答案: 您在NSArray的实例(查询结果)上调用valueForKey。也许你需要 get objectAtIndex:0 首先使用你正在迭代值的变量? valueForKey可能会返回nil。

stringAttribute = [[att valueForKey:@"raumattribut"] componentsJoinedByString:@","];

或类似。

编辑: 起初我在第二部分错过了for循环,我编辑了上面的代码示例以使用attr,其中