我試圖從核心數據中提取結果以在視圖加載時顯示在表視圖中。請求確實獲取結果,但在視圖加載後立即崩潰。獲取結果崩潰(使用persistentContainer) - 核心數據目標C
與理由:「 - [__ NSArrayI isEqualToString:]:發送到實例
自從引入永久集裝箱無法識別的選擇,我找不到任何有關如何使用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];
}
的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);
}
抓取結果
- (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];
}
如果您想了解NSPersistentContainer,請觀看本講座:https://vimeo.com/89370886。本次講座來自NSPersistentContainer之前,但仍然非常相關。基本上NSPersistentContainer設置了演講推薦的核心數據棧。 –
您需要在調試器中運行您的應用程序並打開異常斷點。然後你就可以看到你的應用崩潰的確切位置。一旦我們看到應用程序崩潰的代碼,我們可以調試它出錯的原因。 –
@DaveWeston謝謝你戴夫。我無法在表格視圖中顯示數據。現在解決了。 – Rajxelton