Ошибка преобразования xcode ARC [CFString retain] сбой

Я конвертировал свою огромную программу IOS в ARC, используя автоматическое преобразование xcode. После этого я получаю следующую ошибку: [CFString retain]: сообщение отправлено на освобожденный экземпляр

Трассировка показывает следующую строку, где произошел сбой:

UIImage *image = [[UIImage alloc] initWithContentsOfFile:tile.imagePath];

Следующая строка трассировки дает: __ arclite_objc_retainAutoreleasedReturnValue в /SourceCache/arclite/arclite-7.1/source/arclite.m:241

Может кто-нибудь подсказать мне, где мне искать дальше, или что я могу сделать, чтобы устранить эту аварию?

большое спасибо

РЕДАКТИРОВАТЬ: похоже, что инициализация (NSString *) p в коде ниже требует некоторых изменений. Как мне это изменить, чтобы tile.imagePath не стало нулевым?

- (id)initWithFrame:(MKMapRect)f path:(NSString *)p{
    if (self = [super init]) {
        imagePath = p;
        frame = f;
    }
    return self;
}

Спасибо.

 zolio15 мая 2012 г., 06:03
NSLog показывает, что изменяемый массив плиток существует. Я могу распечатать раму плитки. Но tile.imagePath вылетает. imagePath инициализируется как: NSString * path = [[NSString alloc] initWithFormat: @ "% @ /% @. png", tileBase, tileKey]; ImageTile * tile = [[ImageTile alloc] initWithFrame: путь кадра: путь]; Я не уверен, что тип ImageTile (унаследованный код :-). Для отображения накладываемых плиток поверх SKmap. Что может быть не так при инициализации 'пути'?
 paulmelnikow15 мая 2012 г., 06:11
Выглядит как[-ImageTile initWithFrame:path:] не сохраняетpath.
 CodaFi15 мая 2012 г., 04:59
Какая бы плитка ни была, она не жива, с точки зрения управления памятью.
 CodaFi15 мая 2012 г., 05:25
Ну нет. На самом деле, до ARC этот метод + array возвращал автоматически выпущенный экземпляр, но теперь он просто недолговечный. Вместо этого используйте alloc и init и NSLog, чтобы убедиться, что он жив.
 zolio15 мая 2012 г., 05:19
Спасибо CodaFi. Плитка объекта из массива NSMutable. Когда я копаюсь назад, я замечаю, что плитки инициируются следующим образом: tile = [NSMutableArray array]; Это создает проблему? (Я не вижу, не выделить). Но это был рабочий код, и ARC здесь не менял код.

Ответы на вопрос(1)

Решение Вопроса

imagePath это, вероятно,__unsafe_unretained iVar (или, может быть, вы видитеweak илиassign). Измените это наstrong так, чтобы оно оставалось в ARC.

 zolio15 мая 2012 г., 14:35
Спасибо. Да, imagePath был объявлен как __Unsafe_undefined, и проблема была решена, когда я изменился на strong.
 fzwo15 мая 2012 г., 14:47
Пожалуйста, обратите внимание: это _Unsafe Unretained, не определено. Это говорит вам, в чем проблема: она не была сохранена (так же, какassign до ARC).

Ваш ответ на вопрос