Я думаю, что у меня это получилось. Может быть, кто-то может сказать мне, что не так.Магазин 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"]);
}
Как правило, в такой ситуации, когда ваш код работает, но не делает правильные вещи, я считаю, что решение должно заставить его работать ** и ** делать то же самое. – yuji
Все, что я хотел упомянуть, это отсутствие синтаксической ошибки, чтобы люди фокусировались на логических аспектах. – DAS
Хорошо, так, возможно, вы думаете, что это могло бы быть разумным для вас, чтобы упомянуть что-то о том, что на самом деле делал ваш код, а не о правильной? – yuji