如何打印Core Data元素的属性?

时间:2010-09-28 18:16:58

标签: iphone objective-c core-data

我正在尝试设置一个值,然后使用Core Data返回它。这就是我现在正在做的事情:

NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];   

    NSManagedObject *newShot = [NSEntityDescription insertNewObjectForEntityForName:@"Shots" inManagedObjectContext:context];

    NSString *newName= @"test"; 
    [newShot setValue:newName forKey:@"shotNumber"];    

    NSError *error = nil;
    [context save:&error];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Shots" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSArray *items = [context executeFetchRequest:fetchRequest error:&error];
    [fetchRequest release];
    NSLog(@"test : %@",items);

问题是当我想通过返回数组的NSLog来检查它是否正确存储数据时,这就是我得到的:

 <NSManagedObject: 0x5bbbe10> (entity: Shots; id: 0x5b02b50 <x-coredata://F61F56A7-6A74-42AF-B565-6F9E091DA5F3/Shots/p14> ; data: <fault>)

在2个答案之后,这就是我正在使用的:

int size = [items count];
NSLog(@"array count is %d ",size);

if (size > 0) {

    NSManagedObject *mo = [items objectAtIndex:0];  // assuming that array is not empty
    NSString *value = [[mo valueForKey:@"shotNumber"] stringValue];
    NSLog("Value : %@",value);

}

只是遇到这个小问题:

警告:从不兼容的指针类型传递'NSLog'的参数1

如何记录[mo valueForKey:@"shotNumber"]

3 个答案:

答案 0 :(得分:1)

这是有效和正确的。因为你没有查询它的任何属性或关系,所以它没有出错。你可以在索引0处询问对象(如果结果数组不为空),它的-valueForKey:@“shotNumber”或强制通过将获取请求的-setReturnsObjectsAsFaults:设置为NO(默认情况下为YES)来进行故障。

答案 1 :(得分:1)

“故障”只是尚未加载的对象。核心数据使用故障来提高性能。 Core Data不是立即加载对象的数据,而是表示具有错误的数据,并且只在您尝试访问数据时检索数据。您的日志消息只是说Core Data尚未为您的Shot对象加载任何数据。尝试访问Shot对象的某些属性,看看会发生什么。

要解决第二个问题,您在NSLog语句中的第一个双引号之前省略了@。它应该是:

NSLog(@"Value : %@", value);

答案 2 :(得分:0)

Protip:右键单击NSLog和“跳转到定义”。如果可用,则转到定义(即源文件),如果找不到定义,则转到声明(即头文件)。标题会告诉你它的期望。

NSLog需要一个NSString *格式字符串(即NSLog(@"Foo: %@", bar))。