核心数据:访问关系时,NSSet上的count方法失败

the*_*ole 2 macos cocoa objective-c gnustep

我正在尝试以编程方式访问一对一(一对多).My Data模型包含一个名为language(带有两个字符串属性)的NSManagedEntity,它与一个名为WordCategory的实体(一对多)有关系.我使用NSFetchRequest获取所有语言实体.工作正常.我得到了关系的valueForKey,并且工作正常.我可以使用它的对象.但是,当我尝试将消息计数发送到存储WordCategory对象的NSSet时,我得到了一个

换句话说,这条线有效:

       NSLog(@"word category count %@",[[wordCategory anyObject] valueForKey:@"name"]);
Run Code Online (Sandbox Code Playgroud)

这个没有:

NSLog(@"word category count %@",[wordCategory count]
Run Code Online (Sandbox Code Playgroud)

我收到一条消息:调试器中的EXC_BAD_ACCESS.

这是代码的其余部分:

NSManagedObjectContext *moc = [myAppDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Language" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error: &error];
if (error) {
    [NSApp presentError:error];
    return;
}

NSManagedObject *obj = [results objectAtIndex:0];
NSSet *wordCategory = [obj valueForKey:@"category"];
NSLog(@"word category count %@",[wordCategory count]);
Run Code Online (Sandbox Code Playgroud)

我会感激任何人都可以在这个谜团中流下的光.谢谢你的帮助!

Sid*_*tha 5

  • (NSUInteger)计数

NSSet上方法计数的返回类型是NSUInteger.因此,如果您尝试使用%@来引用此类型,您将在调试器中收到消息:EXC_BAD_ACCESS.您正在访问一种不期望的值.

请尝试使用%d代替.

NSLog(@"word category count%d",[wordCategory count]);

在bobDevil的评论后编辑(准确答案 - 更多评论):

NSLog(@"word category count%lu",[wordCategory count]);

祝一切顺利.