1

这是我的情况:

我有一个应用程序,它在我的应用程序的初始视图中从 Core Data 加载一个表。让我们称之为 View1TVC。AppDelegate.m 已设置,因此 View1TVC 是初始视图。

现在在 View2TVC 中,我正在尝试加载 SAME TABLE(在 View1TVC 中过滤),但应用程序崩溃并出现以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“NSFetchedResultsController 的实例需要非零 fetchRequest 和 managedObjectContext

为 View1TVC 和 View2TVC 加载表格的相关代码是相同的!!它适用于 View1TVC,但不适用于 View2TVC。这是 View2TVC 代码:

 -(void)setupFetchedResultsController
{
     NSString *entityName = @"Task";
     NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);

// REQUEST:
     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];

// SORT:
     request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor
                             sortDescriptorWithKey:@"name" 
                                         ascending:YES 
                                          selector:@selector(localizedCaseInsensitiveCompare:)]];

// FETCH: 
     self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                                               managedObjectContext:self.managedObjectContext
                                                 sectionNameKeyPath:nil 
                                                          cacheName:nil];
     [self performFetch];
 }



 -(void)viewWillAppear:(BOOL)animated
 {
     [super viewWillAppear:animated];
     [self setupFetchedResultsController];
 }




 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Configure the cell...

Task *task = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = task.name;

return cell;
}

该应用程序在转到 View2TVC 并到达 setupFetchedResultsController 方法的 SORT 行时会特别挂起:

     request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]];

有人知道吗?该错误是否与我在 AppDelegate.m 中将 View1TVC 标识为我的默认应用程序有关?这是 AppDelegate.m 中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
View1TVC *controller = (View1TVC *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
return YES;
}

我非常感谢任何人可以提供的任何见解!谢谢。

4

0 回答 0