Очистить NSDictionary NSarrays - PullRequest
       1

Очистить NSDictionary NSarrays

0 голосов
/ 30 августа 2011

Я потратил много времени, пробуя сотни вещей и ища в интернете свою проблему, но ничего не нашел, поэтому надеюсь, что вы, ребята, сможете мне помочь:).

Итак, у меня есть NSMutableDictionary, который я заполняю NSArrays при разборе XML-документа.Моя проблема в том, что я хочу очистить его перед тем, как выпустить, потому что он, кажется, вызывает утечки!

На мой взгляд, лучшее решение: [myDict removeObjectsForKeys : [myDict allKeys]], но приложение вылетает, и я получаю следующее сообщение вконсоль:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

Я действительно не могу понять, почему ... какие-либо идеи?

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

Важный момент, который я забыл (я думаю,...), то, что словарь, который я вызываю, находится в моем приложении Delegate, с appDelegate = [[UIApplication sharedApplication] delegate];.(appDelegate определен в моем .h с типом класса myAppDelegate).

Затем я инициализирую его следующим образом: appDelegate.myDict = [[NSMutableDictionary alloc] init];

Это неправильно?

Что тогда странно,когда я делаю:

    [appDelegate.myDict release];
    NSLog( @"%@", appDelegate.myDict);

я получаю заполненный словарь ...

EDIT 2

Я только что понял, что все мои переменные appDelegate не освобождаются, когдаЯ звоню [appDelegate.myVariable release] ... Wtf, я делаю неправильно?Это сводит меня с ума> <</p>

Ответы [ 4 ]

3 голосов
/ 30 августа 2011

Когда вы выпускаете словарь или массив, он освобождает все элементы внутри него.Если вы получаете утечки, это происходит не из-за невозможности удаления объектов.

Конечно, в вашем случае часть проблемы заключается в том, что вы не знаете, где происходит ошибка.-[NSCFArray objectAtIndex:]: index (0) beyond bounds (0) означает, что вы выполняли objectAtIndex для (пустого) NSArray, и этого не произойдет (напрямую), если вы выполните [myDict removeObjectsForKeys : [myDict allKeys]] для NSDictionary.Поэтому вам нужно выяснить, откуда на самом деле происходит эта ошибка.

2 голосов
/ 30 августа 2011

Что по этому поводу:

// myDict should be NSMutableDictionary
[myDict removeAllObjects];
1 голос
/ 30 августа 2011

Это должно помочь вам выяснить, какая клавиша (или клавиши) указывает на неправильно работающие массивы.

 for ( NSString *key in [myDict allKeys]) {
      NSLog(@" key - %@", key);
      [myDict removeObjectForKey: key];
 }
 NSLog(@" the problem is not with the dictionary...");
0 голосов
/ 30 августа 2011

Вам не нужно очищать NSMutableDictionary перед выпуском.Любые объекты, сохраненные в словаре, будут отправлять сообщение release, когда словарь имеет значение dealloc ed.

. Звучит так, как будто ваши массивы хранятся в другом месте, вызывая утечку.Вы уверены, что правильно реализовали dealloc методы для всех ваших объектов (контроллеров представления, объектов модели и т. Д.)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...