2010-11-17 5 views
0

У меня есть метод, который должен возвращать UIImage, созданный из contentsOfFile (чтобы избежать кэширования), но когда он возвращается, я получаю EXC_BAD_ACCESS. Запуск через инструменты не показывает никаких результатов, поскольку он просто бежит, не останавливаясь на зомби.EXC_BAD_ACCESS при возврате UIImage

Изображение правильно копируется в фазе Bundle ресурсов ...

- (UIImage *)imageForName:(NSString *)name { 
    NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"png"]; 
    return [UIImage imageWithContentsOfFile:path]; 

}

Этот метод был адаптирован из образца PhotoScroller, который работает правильно.

Благодаря

EDIT:

Это код, который использует imageForName, и вы можете видеть, я добавил сохранить, в соответствии с Люком/предложение Т в, но EXC_BAD_ACCESS на возвращение, а не мой AddObject : call:

NSMutableArray *images; 

for (NSDictionary *dict in imageListForPage){ 
    [images addObject:[[self imageForName:[dict valueForKey:@"name"]]retain]]; 
} 
+0

Мы должны увидеть код, который использует imageForName см ответ Луки – willcodejavaforfood

ответ

2

ImageWithContentsOfFile вернет автоматически выпущенный объект. Если вы не сохранили его (по возвращении [edit]), вы получите плохой доступ.

Edit:

Проверьте указатель на NSArray. Вам необходимо инициализировать массив либо alloc как обычно, либо использовать arraywith

e.g.

NSMutableArray *images = [NSMutableArray arrayWithCapacity:ARRAY_CAPACITY];//autoreleased 

или

NSMutableArray *images = [[NSMutableArray alloc] init];//release later 
+1

Не храните его в 'imageForName:' ​​себя, хотя. –

+0

Я изменил код, выше, чтобы показать, что произойдет, когда я это сделал. Как будто изображение не может быть найдено, но я не получаю ничто. – joec

0

Добавление объекта к NSMutableArray неявно послать ему retain, так что нет необходимости в вашем коде.

Можете ли вы подтвердить (с помощью NSLog() или контрольную точку), что

[UIImage imageWithContentsOfFile:path]

возвращает объект в методе imageForName:?

0

Наконец, этот код должен быть:

NSMutableArray *images = [NSMutableArray new]; // new is same as [[alloc] init] 

for (NSDictionary *dict in imageListForPage) { 
    [images addObject:[self imageForName:[dict valueForKey:@"name"]]]; 
} 
// ... do something with images 
[images release]; 
Смежные вопросы