2012-04-12 3 views
-1

Я думаю, что у меня это получилось. Может быть, кто-то может сказать мне, что не так.Магазин NSString для NSArray

NSString:

Patrick\nNice picture!\nAndy\nI like it\nTim\nMe too\n 

Я хочу сохранить эту строку в NSArray как:

- NSArray 
    - NSDictionary 
      - name (e.g. Andy) 
      - kommentar (e.g. I like it) 

Это как-то логическая ошибка, но это сводит меня с ума ... (Код работает, но не правильная вещь.)

Мой код:

for (int i = 0; i <= ([[aStr componentsSeparatedByString:@"\n"] count] - 1/2); i++) { 
    NSMutableDictionary * comment = [[NSMutableDictionary alloc] init]; 
    if (i % 2 == 0) { 
     [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i] forKey:@"name"]; 
     [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i] forKey:@"kommentar"]; 
    } 
    [commentsArray addObject:comment]; 
    //NSLog(@"%@", [comment description]); 
    //NSLog(@"Bla."); 
    //comment = nil; 
} 

for (int a = 0; a <= [commentsArray count] - 1; a++) { 
    NSLog(@"Name: %@ Nachricht: %@", [[commentsArray objectAtIndex:a] valueForKey:@"name"], [[commentsArray objectAtIndex:a] valueForKey:@"kommentar"]); 
} 

я получаю:

Name: Patrick Nachricht: Patrick 
Name: (null) Nachricht: (null) 
Name: Andy Nachricht: Andy 
Name: (null) Nachricht: (null) 
Name: Tim Nachricht: Tim 
Name: (null) Nachricht: (null) 
Name: Nachricht: //that's because of the last \n 
Name: (null) Nachricht: (null) 

Я также попытался

[comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i + 1] forKey:@"kommentar"]; 

... но это дает мне out of bounds - ошибка, которая ясна.

РЕШЕНИЕ:

for (int i = 0; i <= ([[aStr componentsSeparatedByString:@"\n"] count] - 1); i++) { 
    NSMutableDictionary * comment = [[NSMutableDictionary alloc] init]; 
    if (i % 2 != 0) { 
     [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i - 1] forKey:@"name"]; 
     [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i] forKey:@"kommentar"]; 
    } 
    [commentsArray addObject:comment]; 
} 

for (int a = 0; a <= [commentsArray count] - 1; a++) { 
    NSLog(@"Name: %@ Nachricht: %@", [[commentsArray objectAtIndex:a] valueForKey:@"name"], [[commentsArray objectAtIndex:a] valueForKey:@"kommentar"]); 
} 
+0

Как правило, в такой ситуации, когда ваш код работает, но не делает правильные вещи, я считаю, что решение должно заставить его работать ** и ** делать то же самое. – yuji

+0

Все, что я хотел упомянуть, это отсутствие синтаксической ошибки, чтобы люди фокусировались на логических аспектах. – DAS

+0

Хорошо, так, возможно, вы думаете, что это могло бы быть разумным для вас, чтобы упомянуть что-то о том, что на самом деле делал ваш код, а не о правильной? – yuji

ответ

0
for (int i = 0; i <= ([[aStr componentsSeparatedByString:@"\n"] count] - 1); i++) { 
NSMutableDictionary * comment = [[NSMutableDictionary alloc] init]; 
if (i % 2 != 0) { 
    [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i - 1] forKey:@"name"]; 
    [comment setValue:[[aStr componentsSeparatedByString:@"\n"] objectAtIndex:i] forKey:@"kommentar"]; 
} 
[commentsArray addObject:comment]; 
} 

for (int a = 0; a <= [commentsArray count] - 1; a++) { 
NSLog(@"Name: %@ Nachricht: %@", [[commentsArray objectAtIndex:a] valueForKey:@"name"], [[commentsArray objectAtIndex:a] valueForKey:@"kommentar"]); 
} 
0

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

1). Почему вы только перебираете половину массива? (count - 1)/2 в примере, который вы даете, вы будете читать только первые два пункта. править - на самом деле с вашим синтаксисом он будет 1/2, затем - 1 ... так ...

2). Почему вы создаете экземпляр объекта комментария и добавляете его в свой массив, даже если ваше требование i% 2 = 0 не выполняется.

Мне кажется, что с приведенным выше примером вы получите массив, в котором каждый объект seconf в массиве пуст. Поместите свое добавление в оператор if.

+0

Посмотрите на мое решение. 2) Вы правы: Отсутствует if-statement. – DAS

Смежные вопросы