С:
[sections addObject:rows];
[rows removeAllObjects];
[rows addObject:dict];
вы продолжаете добавлять один и тот же объект rows
, а не новый, и продолжаете изменять содержимое, чтобы каждый раз отображалось последнее содержимое.
Попробуйте:
[sections addObject:[rows mutableCopy]];
[rows removeAllObjects];
[rows addObject:dict];
Таким образом, каждый раз добавляется новая строка.
Возможно, еще лучше:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSMutableArray *sections = [NSMutableArray array];
NSMutableArray *rows = [NSMutableArray array];
NSString *lastDate = nil;
for (NSDictionary *dict in [json objectForKey:@"data"]) {
NSString *date = [dict objectForKey:@"date"];
if ([date isEqualToString:lastDate] == NO) {
if (lastDate == nil) {
[rows addObject:dict];
lastDate = date;
} else {
[sections addObject:rows];
rows = [NSMutableArray array];
[rows addObject:dict];
lastDate = date;
}
[rows addObject:dict];
}
}
if (rows) {
[sections addObject:rows];
}
self.appointments = sections;
Обратите внимание, что присвоение 0 объекту не освобождает его, release
делает. Но если вы используете удобные методы для создания объектов, они автоматически высвобождаются, и для их освобождения не требуется никаких дополнительных действий.
Также обратите внимание, что при сравнении строк необходимо использовать метод isEqualToString:
для сравнения содержимого, просто с помощью =
или !=
сравнивается только адрес строк.