вылетает мое приложение [NSMutableArray1 removeAllObjects] iphone SDK - PullRequest
1 голос
/ 18 октября 2010

я использую этот код, чтобы проверить, существуют ли какие-либо объекты в моем NSMutableArray если да, я удаляю их все, но происходит сбой, хотя есть объекты, почему?

    if([NSMutableArray1 count]==1)
    {
        [poemoptionslist removeAllObjects];
    }



    if ([NSMutableArray1 count]==0)
    {
        [poemoptionslist addObject: final1];
    }

КОНСОЛЬНЫЙ ВЫХОД

2010-10-18 03: 42: 13.166 app1 [33398: 207] * Завершение приложения из-за неисследованного исключения 'NSInternalInconsistencyException', причина: '- [__ NSCFArray removeObjectAtIndex:]: метод мутирования отправлено неизменному объекту * стек вызовов при первом броске: (0 CoreFoundation
0x02e55b99 исключение препроцесс + 185 1 libobjc.A.dylib
0x02fa540e objc_exception_throw + 47 2 CoreFoundation
0x02e0e238 + [NSException поднять: формат: аргументы:] + 136 3
CoreFoundation
0x02e0e1aa + [NSException поднять: формат:] + 58 4
CoreFoundation
0x02e4d3c1 - [__ NSCFArray removeObjectAtIndex:] + 193 5
CoreFoundation
0x02dfe973 - [NSMutableArray removeAllObjects] + 83 6
poemsoflove
0x0004dc8d - [submitpoem submitpoem:] + 18560 7 UIKit
0x003b77f8 - [UIApplication sendAction: to: from: forEvent:] + 119 8 UIKit
0x00442de0 - [UIControl sendAction: to: forEvent:] + 67 9
UIKit
0x00445262 - [UIControl (внутренний) _sendActionsForEvents: withEvent:] + 527 10 UIKit
0x00443e0f - [UIControl прикосновенияВокруглено: withEvent:] + 458 11 UIKit
0x003db3d0 - [UIWindow _sendTouchesForEvent:] + 567 12 UIKit
0x003bccb4 - [UIApplication sendEvent:] + 447 13 UIKit 0x003c19bf _UIApplicationHandleEvent + 7672 14 GraphicsServices
0x033e6822 PurpleEventCallback + 1550 15 CoreFoundation
0x02e36ff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION
+ 52 16 CoreFoundation 0x02d97807 __CFRunLoopDoSource1 + 215 17 CoreFoundation
0x02d94a93 __CFRunLoopRun + 979 18 CoreFoundation
0x02d94350 CFRunLoopRunSpecific + 208 19 CoreFoundation
0x02d94271 CFRunLoopRunInMode + 97 20 GraphicsServices
0x033e500c GSEventRunModal + 217 21 GraphicsServices
0x033e50d1 GSEventRun + 115 22 UIKit 0x003c5af2 UIApplicationMain + 1160 23 стихотворения
0x00002728 основной + 102 24 стихотворения 0x000026b9 начало + 53 25 ???
0x00000001 0x0 + 1) завершить вызов после броска экземпляра Программа «NSException» получила сигнал: «SIGABRT».

Ребята, нет NSArray!

Я сохраняю в NSUSerdefaults, как это:

if ([mutable1 count] == ​​0) { [mutable1 addObject: final1]; }

    NSUserDefaults *list =[NSUserDefaults standardUserDefaults];
    [list setObject:mutable1 forKey:@"favorites"];
    [list synchronize];

и я загружаю данные вот так

NSUserDefaults *prefs1 =[NSUserDefaults standardUserDefaults];

if ( [prefs1 objectForKey:@"favorites"] != nil)
{
    mutable1 = [[NSMutableArray alloc] init];
    mutable1 = [prefs1 objectForKey:@"favorites"];

и я получаю объекты! затем, когда он запускает объекты removeallob, он падает!

Ответы [ 3 ]

7 голосов
/ 18 октября 2010
mutable1 = [[NSMutableArray alloc] init];
mutable1 = [prefs1 objectForKey:@"favorites"];

Даже если вы объявили mutable1 как NSMutableArray, вы переназначаете его на объект, возвращаемый вашим объектом NSUserDefaults.Этот объект, очевидно, является NSArray, а не NSMutableArray, поэтому происходит сбой.

Вы можете загрузить NSMutableArray с массивом предпочтений, выполнив что-то вроде этого:

1 голос
/ 18 октября 2010

Сообщения об ошибках указывают, что вы отправляете сообщение в неизменяемый массив, что вызывает исключение. Неопределенные исключения приводят к завершению программы.

Как вы создаете массив? Наиболее распространенная ошибка, которая может привести к этому, заключается в следующем:

[mutableArray copy]

Даже если копируемая вещь изменчива, копия будет неизменной. В этом случайно выбранном примере используйте instable mutableCopy.

0 голосов
/ 18 октября 2010

Где-то вы задали NSMutableArray1 для экземпляра NSArray, а не NSMutableArray, или объявили NSMutableArray1 как свойство типа NSArray против NSMutableArray.

Кроме того, вы должны следовать соглашениям об именах Cocoa / Objective-C.А именно, имена классов начинаются с верхнего регистра;переменные принимают форму myArray1 (или что-то более описательное, предпочтительно).

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