可以获得成员,但不计入NSMutableArray

时间:2010-06-12 09:31:14

标签: iphone memory-management core-data crash nsmutablearray

我正在从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;

}

我有点困惑,非常希望了解发生了什么。

2 个答案:

答案 0 :(得分:3)

Count是一个整数,因此在与NSLog一起使用时应该使用%d

NSArray Reference

答案 1 :(得分:0)

造成现金是因为count是NSArray的方法,而不是属性,因此您不能使用点符号来调用它。你必须使用括号表示法:

 NSLog(@"Found %d character(s).", [characters count]);

如果您使用多种使用点符号调用方法的语言,那么这是一个容易犯的错误。