调用已获取对象的计数时的EXC_BAD_ACCESS

时间:2011-10-18 04:56:23

标签: iphone ios

当此代码被调用EXC_BAD_ACCESS时,我收到NSLog(@"Count: %@", [fetchedObjects count]);错误。这似乎是因为尚未提取对象或类似的东西,因为fetchedObjects不是nil。我注意到如果我为count更改了lastObject,它就会起作用,并且会在控制台中打印以下内容

<Albums: 0x4dc7120> (entity: Albums; id: 0x4d9ad60 <x-coredata://xxxxxxxxxxxxxxxx/Albums/p1> ; data: <fault>)

代码

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Albums" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error != nil) {
    NSLog(@"Error: %@", error);
}
if (fetchedObjects != nil) {
    NSLog(@"objects is not nil");
}

NSLog(@"Count: %@", [fetchedObjects lastObject]);
for (Albums *info in fetchedObjects) {
    NSLog(@"Album: %@", info);
    NSLog(@"Name: %@", info.name);
}        
[fetchRequest release];

如果你们中的任何人有任何指针,那就太棒了。

谢谢!

更新

我意识到格式说明符应该是%d或%i,我的错误。但是,当我在numbersOfRowsInSection方法中调用count函数时,我得到了同样的错误。

2 个答案:

答案 0 :(得分:1)

使用%d%i作为格式说明符来打印 int 值。

NSLog(@"Count: %d", [fetchedObjects count]);

答案 1 :(得分:0)

答案非常正确:

NSLog(@"Count: %d", [fetchedObjects count]);

您还需要检查fetchedObjects的类型

[fetchedObjects isKindOfClass:[NSArray class]];

然后调用count方法,它会正常工作。