2011-10-18 79 views
0

当代码被称为NSLog(@"Count: %@", [fetchedObjects count]);时,出现EXC_BAD_ACCESS错误。看起来好像是因为对象还没有被提取或类似的东西,因为fetchedObjects不是nil。我注意到,如果我改变countlastObject它的工作原理及以下被印在控制台EXC_BAD_ACCESS当调用访问对象的计数时

<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或%我,我的错误。但是,我在numbersOfRowsInSection方法中调用count函数时遇到同样的错误。

回答

1

使用%d%i作为格式说明打印INT值。

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

你是对的,但是当我自己调用count函数时,我得到完全相同的错误,那么问题是什么? – xidew

+0

空堆栈是正确的,您正在打印提取对象的计数,该计数必须是整数值,并且您使用%@将其记录为对象,因此您应该使用%d打印该值。 – Sabby

0

答案是非常正确的:

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

,你还需要检查fetchedObjects

[fetchedObjects isKindOfClass:[NSArray class]]; 

的类型,然后调用计数法,它会正常工作。

+0

我认为executeFetchRequest函数是假设返回一个NSArray?我仍然需要指定我想要一个NSArray? – xidew

+0

是的,我相信你存储的价值不是数组。意思是你正在通过[self.managedObjectContext executeFetchRequest:fetchRequest error:&error]获得其他内容。这就是为什么计数崩溃,这可能是富有成效的猜测。如果有帮助,你可以试试。 – UPT

相关问题