2010-06-12 2 views
2

Я заполняю NSMutableArray из вызова CoreData. Я могу получить первый объект, но когда я пытаюсь получить счет, приложение падает с Program received signal: “EXC_BAD_ACCESS”. Как я могу получить счет?Может получить членов, но не считать NSMutableArray

Вот соответствующий код - я поместил комментарий на строку, где он сбой.

- (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; 

}

Я немного озадачен, и на самом деле был бы признателен за выяснение того, что происходит.

ответ

3

граф является целым числом так, вы должны были использовать% D при использовании его с NSLog

NSArray Reference

+0

Я использовал '.count' в других местах моего кода и отлично работает с другими NSMutableArrays. Вышеупомянутый код также сбой, когда я использую '[количество символов]'. – Curyous

+0

Извините, я знаю ошибку. NSLog должен быть% d, это целое число. NSLog (@ "Найдено% d символов (ов).", Characters.count); // – vodkhang

+0

Правильный спецификатор формата фактически будет '% lu', для' unsigned long', так как метод 'count' NSArray возвращает' NSUInteger'. –

0

Кассовый вызвана тем, что счетчик представляет собой метод, а не свойство, из NSArray так что вы можете» t используйте точечную нотацию для ее вызова. Вы должны использовать кронштейн обозначение таким образом:

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

Это легко сделать ошибку, если вы работали во многих языках, которые используют точечную нотацию для вызова методов.