2

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

换句话说,这条线有效:

       NSLog(@"word category count %@",[[wordCategory anyObject] valueForKey:@"name"]);

这个没有:

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

我在调试器中收到一条消息: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]);

我会感激任何人无法在这个谜团中发现的任何光芒。谢谢你的帮助!

4

1 回答 1

5
  • (NSUInteger) 计数

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

尝试改用 %d。

NSLog(@"单词类别计数 %d",[wordCategory count]);

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

NSLog(@"词类计数%lu",[wordCategory count]);

一切顺利。

于 2010-03-26T20:23:09.307 回答