[英]Fetch Result Crashes (using persistentContainer) - Core Data Objective C
我正在尝试从核心数据中获取结果,以便在每次加载视图时显示在表视图中。 Request确实会获取结果,但视图加载后立即崩溃。
自从引入持久性容器以来,我找不到有关如何使用Objective C使用它的任何参考。
我有一个简单的核心数据模型,实体-具有属性的“项”-“名称”
// 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];
}
- (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);
}
- (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];
}
错误消息表明正在对NSArray
对象调用isEqualToString:
方法-显然不起作用( isEqualToString:
是NSString
方法)。
因此,您的代码将数组当作字符串对待。 问题的根源在于fetchItems
代码:
NSManagedObject *result = (NSManagedObject*)[context executeFetchRequest:request error:&error];
NSString *resultString = [result valueForKey:@"name"];
[resultListArray addObject:resultString];
第一行是错误的: executeFetchRequest
返回一个NSManagedObjects
数组(即使该数组中只有一个对象)。 因此,您可以使用:
NSArray *result = [context executeFetchRequest:request error:&error];
self.resultListArray = [[result valueForKey:@"name"] mutableCopy];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.