Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 添加包含核心数据的持久存储时涉及的pfubiquityper例外&;苹果云_Macos_Cocoa_Exception_Core Data_Icloud - Fatal编程技术网

Macos 添加包含核心数据的持久存储时涉及的pfubiquityper例外&;苹果云

Macos 添加包含核心数据的持久存储时涉及的pfubiquityper例外&;苹果云,macos,cocoa,exception,core-data,icloud,Macos,Cocoa,Exception,Core Data,Icloud,当我使用NSPersistentStoreUbiquitousContentNameKey和NSPersistentStoreUbiquitousContentURLKey添加持久存储时,我的应用程序每秒都会崩溃一次,出现异常。调用addPersistentStoreWithType:configuration:URL:options:error: 堆栈跟踪如下所示: *** Terminating app due to uncaught exception 'NSInvalidArgument

当我使用
NSPersistentStoreUbiquitousContentNameKey
NSPersistentStoreUbiquitousContentURLKey
添加持久存储时,我的应用程序每秒都会崩溃一次,出现异常。调用
addPersistentStoreWithType:configuration:URL:options:error:

堆栈跟踪如下所示:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
  reason: 'An NSManagedObject of class 'PFUbiquityPeer' must have a valid
  NSEntityDescription.'
*** First throw call stack:
(
     0   CoreFoundation   0x00007fff8b35ffc6 __exceptionPreprocess + 198
     1   libobjc.A.dylib  0x00007fff83368d5e objc_exception_throw + 43
     2   CoreData         0x00007fff82c28c06 -[NSManagedObject initWithEntity:insertIntoManagedObjectContext:] + 182
     3   CoreData         0x00007fff82d4d3dc +[PFUbiquityPeer(UbiquityMethods) peerForPeerID:inManagedObjectContext:createIfMissing:] + 364
     4   CoreData         0x00007fff82d4f809 -[PFUbiquityPeerRange(UbiquityMethods) loadFromStoreMetadataDictionary:] + 105
     5   CoreData         0x00007fff82d80372 -[PFUbiquityStoreMetadataMedic recoverPeerRangesWithError:] + 418
     6   CoreData         0x00007fff82d80ab5 -[PFUbiquityStoreMetadataMedic recoverMetadataWithError:] + 1749
     7   CoreData         0x00007fff82d831dc -[PFUbiquitySetupAssistant performPostStoreSetupWithStore:error:] + 732
     8   CoreData         0x00007fff82c04001 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 3537
     9   MyApp            0x000000010323de60 -[AppDelegate persistentStoreCoordinator] + 4224
     10  MyApp            0x000000010323e43f -[AppDelegate managedObjectContext] + 95
     11  Foundation       0x00007fff863b5384 _NSGetUsingKeyValueGetter + 62
     12  Foundation       0x00007fff863b5339 -[NSObject(NSKeyValueCoding) valueForKey:] + 392
     13  Foundation       0x00007fff863d4dc6 -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 348
     14  AppKit           0x00007fff87fb1ae2 -[NSBinder _valueForKeyPath:ofObject:mode:raisesForNotApplicableKeys:] + 654
     15  AppKit           0x00007fff87fb17cc -[NSBinder valueForBinding:resolveMarkersToPlaceholders:] + 171
     16  AppKit           0x00007fff87fb143a -[NSObjectParameterBinder _updateObject:observedController:observedKeyPath:context:] + 1181
     17  AppKit           0x00007fff87fa3777 -[NSObject(NSKeyValueBindingCreation) bind:toObject:withKeyPath:options:] + 591
     18  AppKit           0x00007fff87f9ca89 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1079
     19  AppKit           0x00007fff87f9309f loadNib + 322
     20  AppKit           0x00007fff87f9259c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217
     21  AppKit           0x00007fff87f924b7 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141
     22  AppKit           0x00007fff87f923fa +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364
     23  AppKit           0x00007fff882059b3 NSApplicationMain + 398
     24  MyApp            0x0000000103239522 main + 34
     25  MyApp            0x00000001032394f4 start + 52
     26  ???              0x0000000000000003 0x0 + 3
)
terminate called throwing an exception(lldb)
- (NSManagedObjectContext *)managedObjectContext
{
  if (managedObjectContext_)
  {
    return managedObjectContext_;
  }

  NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;
  if (!coordinator)
  {
    return nil;
  }

  NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] 
    initWithConcurrencyType:NSMainQueueConcurrencyType];
  [moc performBlockAndWait:
   ^{
    moc.mergePolicy = [[NSMergePolicy alloc] 
      initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType];
    [moc setPersistentStoreCoordinator:coordinator];

    [[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(mergeChangesFrom_iCloud:) 
      name:NSPersistentStoreDidImportUbiquitousContentChangesNotification 
      object:coordinator];
  }];
  managedObjectContext_ = moc;

  return managedObjectContext_;
}
当我不向存储添加
NSPersistentStoreUbiquitousContentNameKey
NSPersistentStoreUbiquitousContentURLKey
选项时,一切正常。我只有在每启动一次应用程序时才会出现此异常。出于测试目的(因为我认为问题可能与并发性有关),我从主NIB文件中删除了所有核心数据访问和绑定,并尝试在
applicationdFinishLaunching:
方法中以编程方式访问核心数据堆栈。在第一次测试中,我直接执行了此操作,第二次执行选择器(
managedObjectContext
)时延迟了10秒。这两个测试在每秒钟启动一次应用程序时都会导致相同的异常

(本例略为缩短)
managedObjectContext
方法如下所示:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
  reason: 'An NSManagedObject of class 'PFUbiquityPeer' must have a valid
  NSEntityDescription.'
*** First throw call stack:
(
     0   CoreFoundation   0x00007fff8b35ffc6 __exceptionPreprocess + 198
     1   libobjc.A.dylib  0x00007fff83368d5e objc_exception_throw + 43
     2   CoreData         0x00007fff82c28c06 -[NSManagedObject initWithEntity:insertIntoManagedObjectContext:] + 182
     3   CoreData         0x00007fff82d4d3dc +[PFUbiquityPeer(UbiquityMethods) peerForPeerID:inManagedObjectContext:createIfMissing:] + 364
     4   CoreData         0x00007fff82d4f809 -[PFUbiquityPeerRange(UbiquityMethods) loadFromStoreMetadataDictionary:] + 105
     5   CoreData         0x00007fff82d80372 -[PFUbiquityStoreMetadataMedic recoverPeerRangesWithError:] + 418
     6   CoreData         0x00007fff82d80ab5 -[PFUbiquityStoreMetadataMedic recoverMetadataWithError:] + 1749
     7   CoreData         0x00007fff82d831dc -[PFUbiquitySetupAssistant performPostStoreSetupWithStore:error:] + 732
     8   CoreData         0x00007fff82c04001 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 3537
     9   MyApp            0x000000010323de60 -[AppDelegate persistentStoreCoordinator] + 4224
     10  MyApp            0x000000010323e43f -[AppDelegate managedObjectContext] + 95
     11  Foundation       0x00007fff863b5384 _NSGetUsingKeyValueGetter + 62
     12  Foundation       0x00007fff863b5339 -[NSObject(NSKeyValueCoding) valueForKey:] + 392
     13  Foundation       0x00007fff863d4dc6 -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 348
     14  AppKit           0x00007fff87fb1ae2 -[NSBinder _valueForKeyPath:ofObject:mode:raisesForNotApplicableKeys:] + 654
     15  AppKit           0x00007fff87fb17cc -[NSBinder valueForBinding:resolveMarkersToPlaceholders:] + 171
     16  AppKit           0x00007fff87fb143a -[NSObjectParameterBinder _updateObject:observedController:observedKeyPath:context:] + 1181
     17  AppKit           0x00007fff87fa3777 -[NSObject(NSKeyValueBindingCreation) bind:toObject:withKeyPath:options:] + 591
     18  AppKit           0x00007fff87f9ca89 -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1079
     19  AppKit           0x00007fff87f9309f loadNib + 322
     20  AppKit           0x00007fff87f9259c +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] + 217
     21  AppKit           0x00007fff87f924b7 +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] + 141
     22  AppKit           0x00007fff87f923fa +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 364
     23  AppKit           0x00007fff882059b3 NSApplicationMain + 398
     24  MyApp            0x0000000103239522 main + 34
     25  MyApp            0x00000001032394f4 start + 52
     26  ???              0x0000000000000003 0x0 + 3
)
terminate called throwing an exception(lldb)
- (NSManagedObjectContext *)managedObjectContext
{
  if (managedObjectContext_)
  {
    return managedObjectContext_;
  }

  NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;
  if (!coordinator)
  {
    return nil;
  }

  NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] 
    initWithConcurrencyType:NSMainQueueConcurrencyType];
  [moc performBlockAndWait:
   ^{
    moc.mergePolicy = [[NSMergePolicy alloc] 
      initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType];
    [moc setPersistentStoreCoordinator:coordinator];

    [[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(mergeChangesFrom_iCloud:) 
      name:NSPersistentStoreDidImportUbiquitousContentChangesNotification 
      object:coordinator];
  }];
  managedObjectContext_ = moc;

  return managedObjectContext_;
}
persistentStoreCoordinator
的相关部分是:

  NSMutableDictionary *storeOptions = [NSMutableDictionary dictionary];
  [storeOptions setObject:[NSNumber numberWithBool:YES] 
    forKey:NSMigratePersistentStoresAutomaticallyOption];
  [storeOptions setObject:[NSNumber numberWithBool:YES] 
    forKey:NSInferMappingModelAutomaticallyOption];

  NSURL *url = [NSURL fileURLWithPath:[applicationSupportDirectory 
    stringByAppendingPathComponent:kJCMyAppDatabaseFilename]];
  NSURL *ubiquityURL = [[NSFileManager defaultManager] 
    URLForUbiquityContainerIdentifier:nil];
  if (ubiquityURL)
  {
    JCDLog(@"User has iCloud enabled.");
    [storeOptions setObject:@"com.juicycocktail.myapp" 
      forKey:NSPersistentStoreUbiquitousContentNameKey];
    [storeOptions setObject:[NSURL fileURLWithPath:[[ubiquityURL path] 
      stringByAppendingPathComponent:kJCMyAppDatabaseFilename]] 
      forKey:NSPersistentStoreUbiquitousContentURLKey];       
  }

  persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] 
    initWithManagedObjectModel:mom];
  NSPersistentStoreCoordinator *psc = persistentStoreCoordinator_;

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
  (dispatch_block_t)^{
    [psc lock];
    if (![psc addPersistentStoreWithType:kJCMyAppStoreType
      configuration:nil URL:url options:storeOptions error:&error])
    {
      dispatch_async(dispatch_get_main_queue(),
      ^{
        [[NSApplication sharedApplication] presentError:error];
        persistentStoreCoordinator_ = nil;

        return;
      });
    }    
    [psc unlock];

    dispatch_async(dispatch_get_main_queue(),
    ^{
      JCDLog(@"asynchronously added persistent store!");
      [[NSNotificationCenter defaultCenter]
        postNotificationName:@"RefetchAllDatabaseData"
        object:self userInfo:nil];
    });
  });

  return persistentStoreCoordinator_;
我猜PfUbiquityper类可能与保存在iCloud移动文档文件夹中的核心数据的事务日志有关,但我仍然找不到这个问题的真正原因。对于如何跟踪此异常根源的任何帮助,我都非常感谢,因为我已经发疯了。特别是一个解决办法,甚至一个解决方案,都会对我很有帮助。我也很高兴,如果有人有一个提示,至少如何跟踪这个异常


注意:我还提交了一个bug,以防这是一个API bug(rdar://10892613).

重新启动OS X解决了这个问题。这让我想起了一个。

哇,我重新启动了电脑,它也工作了!在重新启动之前,我的代码将在向migratePersistentStore方法添加NSPersistentStoreUbiquitousContentNameKey的位置停止