【问题标题】:Core-data: when accessing a relationship, the count method on NSSet fails核心数据:访问关系时,NSSet 上的 count 方法失败
【发布时间】:2010-03-26 20:03:29
【问题描述】:

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

换句话说,这条线有效:

       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]);

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

【问题讨论】:

    标签: objective-c cocoa macos gnustep


    【解决方案1】:
    • (NSUInteger)计数

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

    尝试改用 %d。

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

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

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

    一切顺利。

    【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多