Проблема сбоя приложения при использовании plist в iPhone - PullRequest
0 голосов
/ 08 сентября 2010

Я использовал NSMutable Dictionary и NSMutable Array. Данные должны храниться и извлекаться из plist (Каталог документов) с использованием NSArray из NSMutable Dictionary.

Edit:

У меня шесть кнопок в представлении прокрутки, при нажатии кнопки данные должны отображаться в виде таблицы с использованием синтаксического анализа XML. я поместил данные в список, извлек их из списка и отобразил в виде таблицы. В табличном представлении у меня есть одна кнопка в виде нижнего колонтитула. При нажатии на кнопку, следующие элементы должны быть проанализированы и отображены в виде таблицы. Следующее содержимое анализа добавляется к предыдущему содержимому. Я использовал NSMutable Dictionary для хранения данных в plsit.

Вот мой код,

Возвращаемый массив возвращает подробности синтаксического анализа и.

  -(void)callFromSecondaryThread:(NSMutableArray *)returnArray{

     if([returnArray count] > 0)
     {
         for(NSMutableArray *arr in returnArray)
         {
             //[copyArray addObjectsFromArray:returnArray];  
             //[copyArray addObject:returnArray];   
             //[ ???? ??? ??????? ?????? ] 
         } 
               [self.table reloadData];
     }

// Впервые сохранить содержимое в списке и загрузить содержимое из списка и отображается в виде таблицы

 -(void)startParsingBasedOnSelectedTabValue:(NSString *)strValue {//button value

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    if (![self checkFileIsThere:tagString]) { //checks the plist is available or not, if its not available, then create a new file. i have created separate plist file for each buttons.

    if([copyArray count] > 0)
    {
        [copyArray removeAllObjects];
    }

    feedDictionary = [[NSMutableDictionary alloc]init];

    //send url for parsing [self parsingMethod];

    [feedDictionary setObject:copyArray forKey:tagString];

    [feedDictionary writeToFile:[self saveFilePath:tagString] atomically:NO];

    [feedDictionary release];

    } else{

             NSString *stringPtah = [self saveFilePath:tagString];

             NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:stringPtah];

             NSMutableArray *arrArray = [dictionary objectForKey: tagString];

             copyArray = [arrArray copy];
                   }  
            [self.table performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
            [pool drain];
       }


     //On clicks the next 10 details button, 

 -(void) details:(NSString *) strpageCount
 {

    if ([self checkFileIsThere:tagString]) {

    [[NSFileManager defaultManager]  removeItemAtPath:[self saveFilePath:tagString] error:NULL];  // remove the old plist here

     NSMutableDictionary *feedDictionary1 = [[NSMutableDictionary alloc]init];

     [self parsingMehods];

     [feedDictionary1 setValue:copyArray forKey:tagString];

     [feedDictionary1 writeToFile:[self saveFilePath:tagString] atomically:NO];

     [pageDictionary setValue:pString forKey:tagString];

     [feedDictionary1 release];

     [self.table reloadData]; // After writing the file in the plist, i just reload the table data and displayed the contents in the table view. 

    }
 }

Но я могу иногда успешно добавлять данные в copyArray. Это означает, что после загрузки просмотра я нажимаю кнопку «Далее», она работает нормально. Но если я переместил следующую кнопку и посетил этот вид, а затем вернулся к первому виду и нажал следующую кнопку, мои приложения зависли.

Я могу получить данные в returnArray, и copyArray - это мой основной массив, и он используется для отображения содержимого (CellforRowatindex) .ReturnArray - это изменяемый массив, содержащий заголовок, дату, изображение и т. Д.,

При нажатии кнопки (следующие 10 деталей) я удалил свой старый plist и создал новый plist с новым содержимым. (Например, первый plist имеет 10 содержимого в массиве копирования и возвращает 4 нового содержимого. добавляется 14 содержимого в массиве копий и отображается в виде таблицы). При первой загрузке моих приложений, нажимает следующую кнопку, массив будет успешно добавлен. Но я захожу на остальные кнопки и детали, затем возвращаюсь к представлению и нажимаю следующую кнопку, я ломаю свои приложения и получаю это исключение,

     Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 

Я потратил много часов на решение этой проблемы и пока не нашел решения.

Пожалуйста, упомянул, что я сделал неправильно в моем коде ..

Пожалуйста, ведите меня?.

Спасибо!

1 Ответ

1 голос
/ 08 сентября 2010

Строка copyArray = [arrArray copy]; должна быть copyArray = [arrArray mutableCopy];.Вы получаете ошибку, потому что copyArray является неизменным.

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