Добавление новых записей в контроллер табличного представления в верхней части таблицы с каждой новой записью при использовании основных данных

Есть два похожих вопроса о stacoverflow, и мой похож на этот, но теперь я использую Xcode 5, а мой код отличается. Я пробовал много разных способов, но они не работают. В Интернете нет решений.

Используя Core Data, у меня есть 1 Table View Controller с кнопкой Add, которая вызывает вызов нового контроллера View, предлагая пользователю добавить текст в 1 поле. Когда пользователь нажимает кнопку "Сохранить", запись добавляется в контроллер табличного представления в качестве ячейки заголовка с заполненной информацией. Я запутался и искал ответы, так это то, что каждая новая запись добавляется к нижней части ячейки, поэтому, если для заполнения экрана достаточно ячеек, новая добавленная запись добавляется к нижней части. Я бы очень хотел, чтобы каждая новая запись была в верхней части ячейки представления таблицы.

Мой вид таблицы:

-(NSManagedObjectContext *)managedObjectContext {
 NSManagedObjectContext *context = nil;
 id delegate = [[UIApplication sharedApplication] delegate];
 if ([delegate performSelector:@selector(managedObjectContext)]) {
 context = [delegate managedObjectContext];
 }
 return context;

}


- (********)cancel:(id)sender {
 [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}




- (void)viewDidLoad {
 [super viewDidLoad];

}

-(void)viewDidAppear:(BOOL)animated {
 [super viewDidAppear:animated];

 NSManagedObjectContext *moc = [self managedObjectContext];
 NSFetchRequest *fechRequest = [[NSFetchRequest alloc] initWithEntityName:@"OneMoreCoffe"];

 moreCoffe = [[moc executeFetchRequest:fechRequest error:nil] mutableCopy];


 [self.tableView reloadData];

}


- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
}

#pragma mark - Table view data source


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 return moreCoffe.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 static NSString *identifier = @"Cell1";
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];

 NSManagedObject *differentCoffe = [moreCoffe objectAtIndex:indexPath.row];


 cell.textLabel.text = [differentCoffe valueForKey:@"type"];





 return cell;
}

Мой контроллер:

@implementation DataViewController
@synthesize textFieldType,differentCoffe;

-(NSManagedObjectContext *)managedObjectContext {
 NSManagedObjectContext *context = nil;
 id delegate = [[UIApplication sharedApplication] delegate];
 if ([delegate performSelector:@selector(managedObjectContext)]) {
 context = [delegate managedObjectContext];
 }
 return context;

}

- (********)save:(id)sender {
 NSManagedObjectContext *context = [self managedObjectContext];
 NSError *error;

 NSManagedObject *newCoffe = [NSEntityDescription insertNewObjectForEntityForName:@"OneMoreCoffe" inManagedObjectContext:context];

 [newCoffe setValue:textFieldType.text forKey:@"type"];


 [context save:&error];
 [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
- (********)cancel:(id)sender {
 [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}

- (void)viewDidLoad {
 [super viewDidLoad];

 if (differentCoffe) {
 [textFieldType setText:[differentCoffe valueForKey:@"type"]];
 }


}
1 ответ

Если вы не возражаете против них ВСЕГДА, находясь в обратном порядке, вы можете просто показывать самые новые сверху.

Замените это:

NSManagedObject *differentCoffe = [moreCoffe objectAtIndex:indexPath.row];

с этим:

NSInteger rowCount = [self.tableView numberOfRowsInSections:indexPath.section]
NSManagedObject *differentCoffe = [moreCoffe objectAtIndex:(rowCount - 1 - indexPath.row)];

licensed under cc by-sa 3.0 with attribution.