2011-10-18 3 views
0

Я получаю ошибку EXC_BAD_ACCESS, когда этот код называется NSLog(@"Count: %@", [fetchedObjects count]);. Похоже, это потому, что объекты еще не получены или что-то вроде этого, потому что fetchedObjects не nil. Я заметил, что если я изменю count для lastObject это работает, и следующий печатается в консолиEXC_BAD_ACCESS при вызове count на извлеченных объектах

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

Если какой-либо из вас есть какие-либо указатели, которые были бы Великий.

Спасибо!

Update

я понял спецификатор формата должен быть или% d% я, моя ошибка. Однако я получаю ту же ошибку, когда вызываю функцию count в методе numbersOfRowsInSection.

ответ

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]; и вот почему счет рушится, это может быть плодотворным. Просто попробуйте, если это поможет. – UPT

Смежные вопросы