«EXC_BAD_ACCESS» как я могу решить эту проблему?

#iphone #objective-c #ios #ios4

#iPhone #objective-c #iOS #ios4

Вопрос:

Я хочу сделать следующее на кнопке clck :

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if (buttonIndex == 0)
     {
         if (QuestionMutableArray==nil) {
            [self testIterator];
         } 
         else
         {
             [myMutableArray release];
             [myDictionary release]; 
             [self dismissModalViewControllerAnimated:YES];

             //[self release];
         }
     }
}
  

После возврата к контроллеру parentView с этим кодом…когда я снова перейду к этому TableView, я хочу перезагрузить свой TableView с новым NSMutableArray.Как я могу очистить свою коллекцию (NSMutableArray или dictionary) с помощью dismissModalViewController?

Ответ №1:

Используйте removeAllObjects метод.

Ответ №2:

Ошибка EXC_BAD_ACCESS возникает при попытке доступа к освобожденной памяти. Возможно, вы пытаетесь получить доступ к массиву или словарю после их освобождения. Вместо этого удалите объекты из массива или словаря.

Комментарии:

1. — (void)AlertView: (UIAlertView *)AlertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) { [self dismissModalViewControllerAnimated: YES]; [QuestionMutableArray removeAllObjects]; XmlManipulatorObject=[[инициализация выделения xmlManipulator]; QuestionMutableArray=[[XmlManipulatorObject ReadXml] сохранить]; [self.TableView release]; }} я попытался, как вы сказали, удалить все объекты из массива. Но я не получаю новые данные в свой список. Он загружается только оттуда, откуда я вернулся. Каким может быть решение?

Ответ №3:

Не выпускайте его, чтобы создать объект nil .

Ответ №4:

EXC_BAD_ACCESS обычно возникает по двум причинам:

  • Строки, не начинающиеся со знака «@» и
  • Плохое управление памятью.

Я предполагаю, что в вашем состоянии вы освобождаете массив и словарь, но вы неправильно инициализируете. Убедитесь, что они правильно инициализированы перед каждым использованием, и сохраняйте их, пока не закончите с ними. Это также может быть вызвано игрой в Interface Builder: я помню, как несколько раз подключал IBOutlet и решил, что имя не имеет никакого смысла, и переименовал свойство. После каждого подключения xcode автоматически помещает инструкцию release в метод dealloc, вы также можете захотеть проверить там, использовали ли вы IB в этом контроллере просмотра, на случай, если свойство было выпущено дважды.