«- [CFString responsedsToSelector:]: сообщение отправлено на освобожденный экземпляр» при попытке доступа к objectArray - PullRequest
1 голос
/ 23 февраля 2011

Я пытаюсь загрузить следующие 10 строк данных в tableView, когда программа выбирает последнюю строку в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Я использую одну функцию с параметром pagenumber для загрузки последовательных страниц.Он работает для первой выборки, т.е. pagenumber 0, но когда я вызываю его снова для выборки строк следующей страницы, он выдает мне эту ошибку

-[CFString respondsToSelector:]: message sent to deallocated instance

После долгого удара головой я обнаружил, что этосоздает эту проблему при попытке доступа к NSMutableArray моих объектов Model.Я использую это следующим образом:

TableRowObjectClass* TempObject = [[TableRowObject alloc] init];
for(int i=0;i<rowArray.count;i++){
    TempObject = [rowArray objectAtIndex:i];
    NSString* objectProperty = [[[NSString alloc] initWithFormat:@"String Property I need from Object to be appended with some text from TableRowObject Class : %@",TempObject.objProperty] retain];
    [propertyArray addObject:objectProperty];
    [objectProperty release];
}

Здесь я получаю массив объектов модели (объекты TableRowObjectClass), и я хочу извлечь objectProperty из TempObject и создать и массив всех этих свойств.Первоначально для pagenumber 0 он выбирает 20 строк, теперь, когда я отображаю 20-ю строку, я вызываю fetch, который вызывает эту функцию, чтобы создать новый массив objectProperty, и я вызываю [TableView reloadData], чтобы показать фрэш-фид с 20(старый) +20 (свежий) фид.

Теперь он создает эту ошибку

-[CFString respondsToSelector:]: message sent to deallocated instance

при попытке доступа,

NSString* objectProperty = [[[NSString alloc] initWithFormat:@"String Property ....TableRowObject Class: %@",TempObject.objProperty] retain];

Я не уверен, что игде это получается dealloc.Я потратил много часов на это, и я не очень хорошо справляюсь с управлением памятью target-c.

Ваша помощь высоко ценится.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

Ваш код довольно ясно указывает на то, что вы не понимаете управление памятью в Objective-C или Objective-C;не беспокойтесь, мы все начали там.Для начала прочитайте Руководство по Objective-C , затем Руководство по управлению памятью .

Некоторые конкретные проблемы:

TableRowObjectClass* TempObject = [[TableRowObject alloc] init];
TempObject = [someArray objectAtIndex: 0];

Утечка.объект, расположенный в первой строке (переменная также должна начинаться со строчной буквы).

Это:

NSString* objectProperty = [[[NSString alloc] initWithFormat:@"..."] retain];
[objectProperty release];

Двойное удержание, уравновешенное одним выпуском, другая утечка.

То, что вы видите message sent to deallocated instance ошибки, указывает на то, что вы чрезмерно освобождаете другие объекты.Следуйте рекомендациям по управлению памятью, используйте «построить и проанализировать», а затем использовать инструмент обнаружения зомби ....

1 голос
/ 23 февраля 2011

Нет необходимости использовать

NSString* objectProperty = [[[NSString alloc] initWithFormat:@"String Property ....TableRowObject : %@",TableRowObject.objProperty] retain];

вы даже можете использовать

NSString* objectProperty = [NSString stringWithFormat:@"String Property ....TableRowObject : %@",TableRowObject.objProperty];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...