2010-12-11 16 views
12

Mam problem z utworzeniem NSDictionaries w pętli i dodaniu go do NSMutableArray.EXC_BAD_ACCESS podczas próby utworzenia nowego NSDictionary

Zasadniczo po prostu chcę zmienić nazwy klawiszy, ale ponieważ nie mogłem znaleźć funkcję, że poszedłem do następującego kodu:

- (NSMutableArray *)getCategoriesForChannel:(int)channelId { 
    NSDictionary *data = [self call:@"get_categories.ashx"]; 
    NSArray *categories = [data objectForKey:@"categories"]; 
    NSMutableArray *returnArray = [NSMutableArray 
          arrayWithCapacity:[categories count]]; 

    for(NSDictionary *category in categories) { 
     [returnArray addObject:[NSDictionary dictionaryWithObjectsAndKeys: 
         [category objectForKey:@"Channel_id"], @"id", 
         [category objectForKey:@"Channel_name"], "@name", nil]]; 
    } 
    return returnArray; 
} 

Ale aplikacja zawsze kończy pracę, gdy osiągnie metodę addObject: i rzuca EXC_BAD_ACCESS. Myślę, że ma to coś wspólnego z zarządzaniem pamięcią, ale ponieważ tak naprawdę nie mam tła C, nie mam pojęcia, jak rozwiązać ten problem. Czy ktoś może wskazać mi właściwy kierunek? Z góry dziękuję!

Odpowiedz

28
[returnArray addObject: 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [category objectForKey:@"Channel_id"], @"id", 
    [category objectForKey:@"Channel_name"], "@name", nil]]; 

Jeśli tak jest w rzeczywistości kod masz (a typo nie została wprowadzona podczas zapisywania go w przeglądarce internetowej), zwróć uwagę, że ostatni klucz masz jest "@name" zamiast @"name". To byłby raczej ciąg C, a nie NSString, który nie może być poprawnie dodany do NSArray (lub większości klas kolekcji, jeśli o to chodzi).

+1

Dziękuję, proszę pana, to był problem! –

+1

Czasami wystarczy inny zestaw oczu! Uratowało to mnie to, na co jestem pewna, że ​​były to godziny frustracji. Dzięki. – MikeCocoa

+3

Arg, właśnie popełniłem ten sam błąd ;-(niewiarygodne, nie ma ostrzeżenia kompilacji ... –

2

Wewnątrz pętli można NSLog ten [category objectForKey: @ "Channel_id"] i [category objectForKey: @ "Channel_name"]? Podejrzewam, że daje zero i powoduje kłopoty. Niepewny. Tylko zgadnij.

Powiązane problemy