Я пытаюсь получить результаты из основных данных для отображения в виде таблицы всякий раз, когда представление загружается. Запрос извлекает результат, но падает, как только загружается вид.Извлечение результатов сбоев (с использованием persistentContainer) - Объект основных данных C
с разумом: «- [__ NSArrayI isEqualToString]: непризнанный селектор направлен например
С введением стойкого контейнера, я не мог найти какие-либо ссылки о том, как использовать его с помощью Objective C.
Я простая модель основных данных, Entity - 'Item' с атрибутом - 'имя'
// ViewController.m //
@interface ViewController()
{
NSMutableArray *listArray;
AppDelegate *delegate;
NSManagedObjectContext *context;
NSMutableArray *resultListArray;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
listArray = [[NSMutableArray alloc]init];
resultListArray = [[NSMutableArray alloc]init];
[self fetchItems];
}
Источник
TableView данных
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [listArray count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (resultListArray) {
cell.textLabel.text = [resultListArray objectAtIndex:indexPath.row];
}
cell.textLabel.text = [listArray objectAtIndex:indexPath.row];
return cell;
}
Получить Управляемый контекст
- (NSManagedObjectContext *)managedObjectContext {
delegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
context = [[delegate persistentContainer]viewContext];
NSLog(@"ManagedContext Created Successfully");
return context;
}
Сохранить в основных данных
- (void) saveItemMethod:(NSString*)name {
context = [self managedObjectContext];
NSManagedObject *task = [[Item alloc]initWithContext:context];
[task setValue:name forKey:@"name"];
NSString *itemString = [task valueForKey:@"name"];
[listArray addObject:itemString];
[delegate saveContext];
NSLog(@"Save successful");
NSLog(@"%@", listArray);
}
Fetch результаты
- (void) fetchItems {
context = [self managedObjectContext];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
// request.resultType = NSDictionaryResultType;
NSError *error = nil;
NSManagedObject *result = (NSManagedObject*)[context executeFetchRequest:request error:&error];
NSString *resultString = [result valueForKey:@"name"];
[resultListArray addObject:resultString];
NSLog(@"Fetch successful");
NSLog(@"%@", resultListArray);
[self.tableView reloadData];
}
Если вы хотите понять NSPsistentContainer, посмотрите эту лекцию: https://vimeo.com/89370886. Эта лекция проходит до того, как NSPsistentContainer существовал, но все еще очень уместен. В основном NSPersistentContainer настраивает стек основных данных, который рекомендует лекция. –
Вам нужно запустить приложение в отладчике и включить контрольные точки исключения. Затем вы можете увидеть, где именно ваше приложение рушится. Когда мы увидим код, в котором приложение разбивается, мы можем отладить, почему это происходит неправильно. –
@DaveWeston спасибо dave. У меня возникли проблемы с отображением данных в виде таблицы. теперь он разрешен. – Rajxelton