0

Tim Roadlys Tutorial に基づいてコアデータが動作するアプリがあります。アプリはタブ バーを使用し、1 つがコアデータをロードします。をロードする別のタブがあり、UIViewそれをボタンでリンクして、tableViewコアデータも持つ別のタブにリンクしています。

問題は、ボタンをクリックすると 2 番目のビューがクラッシュすることです。セグエ経由で管理対象オブジェクト コンテキストを渡すappdelegateか、.

助けてくれてありがとう:)

セグエはこちら

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{


    if ([segue.identifier isEqualToString:@"Load Ancients Segue"]) {
        UITabBarController *tabBarViewController = (UITabBarController *) [segue destinationViewController];
        AncientsInventoryTVC *ancientsInventoryTVC = (AncientsInventoryTVC *) [[[tabBarViewController viewControllers] objectAtIndex:5] topViewController];
        ancientsInventoryTVC.managedObjectContext = self.managedObjectContext;

}

} 

ボタンをクリックしてビューをロードすると、次のロード時にエラーが発生します。これは、セグエで修正していると思ったものです。self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

エラーは - のインスタンスにNSFetchedResultsControllerは非 nil が必要でありfetchRequestmanagedObjectContext

4

3 に答える 3

0

コントローラーで MOC を作成する代わりに、MOC を保持し、両方のコントローラーからそれを使用する別のシングルトン クラスを作成してみませんか?

于 2012-12-08T16:30:38.733 に答える
0

それは多くの情報とゼロコードではありませんが、私はそれを prepareForSegue 呼び出しに入れます

于 2012-12-08T03:41:28.213 に答える
0
@interface DataServer : NSObject

   +(DataServer *) get;

   @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
   @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
   @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator      *persistentStoreCoordinator;

@end



@implementation DataServer

@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

DataServer * _appData;

+(DataServer *) get {
    if (_appData == nil) {
    _appData = [[DataServer alloc] init];
}
return _appData;
}

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil) {
        return __managedObjectContext;
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        __managedObjectContext = [[NSManagedObjectContext alloc] init];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    [__managedObjectContext setMergePolicy: NSOverwriteMergePolicy];
    }
    return __managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel
{
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return __managedObjectModel;
} 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{

    if (__persistentStoreCoordinator != nil) {
        return __persistentStoreCoordinator;
    }

    NSString * dbName = @"MyDbName.sqlite";
    NSURL *storeURL = [[self applicationDocumentsDirectory] 
    URLByAppendingPathComponent: dbName];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] 
    initWithManagedObjectModel: self.managedObjectModel];

     // request automatic migration
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    if (![__persistentStoreCoordinator 
        addPersistentStoreWithType:NSSQLiteStoreType 
        configuration:nil URL:storeURL options: options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        [[[UIAlertView alloc ]
            initWithTitle: @"Internal Error" 
            message: [NSString stringWithFormat: @"%@", [error userInfo]]
            delegate:nil 
            cancelButtonTitle: @"OK" 
            otherButtonTitles: nil] show];
      }    

       return __persistentStoreCoordinator;
    }


- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] 
    URLsForDirectory:NSDocumentDirectory 
    inDomains:NSUserDomainMask] 
    lastObject];
}
于 2012-12-09T02:55:33.320 に答える