NSMutableArray addObject: Ошибка выдачи - PullRequest
1 голос
/ 16 декабря 2011

Вот код, который я пытаюсь ..

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

но когда я пытаюсь снова загрузить представление и вызвать этот код .. это выдает ошибку на arrMain addObject:

Я пытаюсь просмотреть его, но ничего не вижу ..

Может кто-нибудь, пожалуйста, помогите ??

NSUserDefaults *ds = [NSUserDefaults standardUserDefaults];
NSMutableArray *arrMain = [ds objectForKey:@"files"];
int i;

if([arrMain count] > 0)
{
    i = [arrMain count] + 1;

}
else
{
    arrMain = [[NSMutableArray alloc] init];  
    i = 1;
}
NSLog(@"File Name To Be Saved %d.txt",i);

NSArray *sd = [[NSArray alloc] init];
sd = [dict componentsSeparatedByString:@"/"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];

[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"];
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1];
NSArray *extArr = [[NSArray alloc] init];
extArr = [OrgFilename componentsSeparatedByString:@"."];
NSString *flExt = [extArr    objectAtIndex:1];
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"];

// *** error happens VVVV
[arrMain addObject:dict1];
// *** error happens ^^^^

[ds setObject:arrMain forKey:@"files"];
[ds synchronize];

1 Ответ

1 голос
/ 17 декабря 2011

Проблема в том, что вы пытаетесь получить NSMutableArray из NSUserDefaults. Он не будет возвращать NSMutableArray, а вместо NSArray. Вам захочется сделать:

NSMutableArray *arrMain = [[[ds objectForKey:@"files"] mutableCopy] autorelease];

Причиной, по которой он "работал" в первый раз, было arrMain, было ноль, поэтому вы создали правильный NSMutableArray, а затем сохранили его в NSUserDefaults. После этого вы получили действительный объект (не ноль), но это был не тот тип, который вы ожидали. Поскольку -[NSUserDefaults objectForKey:] возвращает тип id, он с радостью назначил ему ваш NSMutableArray объект, даже если это не тот тип.

...