NSMutable Array Ошибка - PullRequest
       28

NSMutable Array Ошибка

0 голосов
/ 09 августа 2011

У меня есть этот код

SBJsonParser *vol= [[SBJsonParser alloc]init];
if (body) {
    NSArray *feeds = [vol objectWithString:body error:nil];
    NSDictionary *results = [body JSONValue];
    NSArray *subs = [results valueForKey:@"subscriptions"];
    NSArray *list;
    NSMutableArray *sub;

    for (NSDictionary *iscrizione in subs){
        NSLog([iscrizione objectForKey:@"title"]);
        NSLog([iscrizione objectForKey:@"htmlUrl"]);
        list=[NSArray arrayWithObjects:[iscrizione objectForKey:@"title"], [iscrizione objectForKey:@"htmlUrl"], nil];  
        [sub addObject:list];

    }

Но когда я пытаюсь добавить список в NSMutableArray, программа вылетает.Зачем?Как я могу вставить [iscrizione objectForKey:@"title"] и [iscrizione objectForKey:@"htmlUrl"] в структуру данных?

РЕДАКТИРОВАТЬ **

SBJsonParser *vol= [[SBJsonParser alloc]init];
if (body) {
    NSArray *feeds = [vol objectWithString:body error:nil];
    NSDictionary *results = [body JSONValue];
    NSArray *subs = [results valueForKey:@"subscriptions"];
    NSMutableArray *sub = [[NSMutableArray alloc] initWithCapacity:[subs count]];
    for (NSDictionary *iscrizione in subs){

        [sub addObject:iscrizione];

    }
    NSDictionary *it=[[NSDictionary alloc]initWithDictionary:[sub objectAtIndex:0]];
    NSLog([it objectForKey:@"title"]);

}

Это мой код.Но я не могу понять, почему я не могу NSLog [это objectForKey: @ "title"].

Ответы [ 4 ]

2 голосов
/ 09 августа 2011

Вы не инициализировали свой NSMutableArray.

Должно быть

NSMutableArray *sub = [[NSMutableArray alloc] initWithCapacity:[subs count]];

Технически, вы можете просто выделить его также с NSMutableArray *sub = [[NSMutableArray array];, но это можетбыть более эффективным, поскольку вы уже знаете, сколько будет вводиться данных.

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

0 голосов
/ 09 августа 2011

Следующие будут работать правильно ...

    NSMutableArray *sub = [[NSMutableArray alloc] init];
    for (NSDictionary *iscrizione in subs)
    {
        NSString *title = [NSString stringWithFormat:@"%@", [iscrizione objectForKey:@"title"]];
        NSString *htmlURL = [NSString stringWithFormat:@"%@",[iscrizione objectForKey:@"htmlUrl"]];
        list=[NSArray arrayWithObjects:title, htmlURL, nil];  
        [sub addObject:list mutableCopy];
    }
0 голосов
/ 09 августа 2011

Вы должны alloc и init MutableArray, прежде чем использовать его.

SBJsonParser *vol= [[SBJsonParser alloc]init];
if (body) {
    NSArray *feeds = [vol objectWithString:body error:nil];
    NSDictionary *results = [body JSONValue];
    NSArray *subs = [results valueForKey:@"subscriptions"];
    NSArray *list;
    NSMutableArray *sub = [[NSMutableArray alloc] initWithCapacity:[subs count]];

    for (NSDictionary *iscrizione in subs){
        NSLog(@"title: %@" ,[iscrizione objectForKey:@"title"]);
        NSLog(@"htmlUrl: %@", [iscrizione objectForKey:@"htmlUrl"]);
        list=[NSArray arrayWithObjects:[iscrizione objectForKey:@"title"], [iscrizione objectForKey:@"htmlUrl"], nil];  
        [sub addObject:list];

    }
    // here you should add code to handle the sub array.

    // Do not forget to release the allocated array
    [sub release], sub =nil;
}
0 голосов
/ 09 августа 2011

sub не выделена память. Вы можете создать пустой массив NSMutableArray *sub = [NSMutableArray array]; вне условия if или сохранить ссылку в вашем коде.

...