Странная ошибка при добавлении NSDictionary в NSArray - PullRequest
0 голосов
/ 26 апреля 2011

Сегодня я получил действительно странную ошибку в своем приложении:

NSMutableDictionary *testLocal = [[NSMutableDictionary alloc] init];
[testLocal setObject:@"Test" forKey:@"title"];
[testLocal setObject:@"test notification" forKey:@"body"];
[testLocal setObject:@"1" forKey:@"repeat"];
[testLocal setObject:@"26.04.2011 - 12:53" forKey:@"start"];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[saver read]];
[[dict objectForKey:@"content"] addObject:testLocal]; //Crashes here! (SIGABRT)

Метод [saver read] возвращает это:

{
    content =     (
                {
            body = "test notification";
            repeat = 1;
            start = "26.04.2011 - 13.06";
            title = Test;
        }
    );
}

Так что я не вижу ошибку, потому чтоdict, в который я пишу, является изменяемым, а ключ "content" является массивом.

Заранее спасибо.mavrick3.

[чтение заставки]:

- (NSDictionary *)read {
    return [[NSDictionary alloc] initWithContentsOfFile:[self filePath]];
}

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

Попробуйте проверить, к какому классу относится объект, возвращаемый [dict objectForKey:@"content"]. Тогда все будет намного яснее для вас. Я подозреваю, что он не возвращает NSMutableArray экземпляр, а что-то еще, скорее всего NSArray, который не отвечает на метод addObject:

1 голос
/ 26 апреля 2011

Из apple Документация для objectForKey :

Значение, связанное с aKey, или nil , если никакое значение не связано с aKey.

Такваш код может быть как ниже

if([dict objectForKey:@"content"] != nil && [[dict objectForKey:@"content"] isKindOfClass:[NSMutableArray class]] )
{
  [[dict objectForKey:@"content"] addObject:testLocal];
} 
else
{
   [dict setObject: textLocal forKey: @"content"];
}
0 голосов
/ 26 апреля 2011

Является ли массив, в который вы хотите добавить словарь, изменяемым?

...