我正在从CoreData调用中填充NSMutableArray。我可以获得第一个对象,但是当我尝试计算时,应用程序崩溃了Program received signal: “EXC_BAD_ACCESS”.
我怎样才能得到计数?
以下是相关代码 - 我在崩溃的行上发表了评论。
- (void)viewDidLoad {
[super viewDidLoad];
managedObjectContext = [[MySingleton sharedInstance] managedObjectContext];
if (managedObjectContext != nil) {
charactersRequest = [[NSFetchRequest alloc] init];
charactersEntity = [NSEntityDescription entityForName:@"Character" inManagedObjectContext:managedObjectContext];
[charactersEntity retain];
[charactersRequest setEntity:charactersEntity];
[charactersRequest retain];
NSError *error;
characters = [[managedObjectContext executeFetchRequest:charactersRequest error:&error] mutableCopy];
if (characters == nil) {
NSLog(@"Did not get results for characters: %@", error.localizedDescription);
}
else {
[characters retain];
NSLog(@"Found some character(s).");
Character* character = (Character *)[characters objectAtIndex:0];
NSLog(@"Name of first one: %@", character.name);
NSLog(@"Found %@ character(s).", characters.count); // Crashes on this line with - Program received signal: “EXC_BAD_ACCESS”.
}
}
}
以前的头文件声明:
@interface CrowdViewController : UITableViewController {
NSManagedObjectContext *managedObjectContext;
NSFetchRequest *charactersRequest;
NSEntityDescription *charactersEntity;
NSMutableArray *characters;
}
我有点困惑,非常希望了解发生了什么。
答案 0 :(得分:3)
Count是一个整数,因此在与NSLog一起使用时应该使用%d
答案 1 :(得分:0)
造成现金是因为count是NSArray的方法,而不是属性,因此您不能使用点符号来调用它。你必须使用括号表示法:
NSLog(@"Found %d character(s).", [characters count]);
如果您使用多种使用点符号调用方法的语言,那么这是一个容易犯的错误。