EXC_BAD_ACCESS при возврате UIImage - PullRequest
       10

EXC_BAD_ACCESS при возврате UIImage

0 голосов
/ 17 ноября 2010

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

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

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

}

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

Спасибо

РЕДАКТИРОВАТЬ:

Это код, который использует imageForName, и вы можете видеть, что я добавил сохранение, согласно предложению Luke / T, но EXC_BAD_ACCESS находится на возврате, а не мой addObject: call:

NSMutableArray *images;

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

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

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

Edit:

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

, например

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

или

NSMutableArray *images = [[NSMutableArray alloc] init];//release later
0 голосов
/ 17 ноября 2010

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

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];
0 голосов
/ 17 ноября 2010

Добавление объекта к NSMutableArray неявно отправит ему retain, поэтому в вашем коде это не обязательно.

Можете ли вы подтвердить (используя NSLog() или точку останова), что

[UIImage imageWithContentsOfFile:path]

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

...