Исключение Cocoa Sync Services

Я пытаюсь запрограммировать приложение Cocoa с помощью Core Data и фреймворка Sync Services,

это работает довольно хорошо, но как только я пытаюсь запустить синхронизацию, я получаю следующее исключение:

>[NOTE: this exception originated in the server.]
can't register schema at /Users/sdk/Documents/Knoma/build/Release/Knoma.app/Contents/Resources/KnomaSchema.syncschema: it contains references to the following undefined objects:
(
    "<ISDDataClass 0x10056e1d0 [com.knoma]>{ bundleRef=<ISDFileReference 0x10051fb80 [A3F1469E-68CE-417D-AFEB-F277E0FCF6CC-46008-0000F268982A8435]]>{ path=\"/Users/sdk/Documents/Knoma/build/Release/Knoma.app/Contents/Resources/KnomaSchema.syncschema\"; mtime=2010-07-11 20:23:25 +0200; bundleId=\"(null)\"; bundleRelativePath=\"(null)\"; windowsBinRelativePath=\"(null)\"} uiHelperClassName=\"(null)\" imagePath=\"(null)\" category=\"(null)\"}"
)

Список свойств моей схемы выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>ManagedObjectModels</key>
 <array>
  <string>../../../Knoma_DataModel.mom</string>
 </array>
 <key>DataClasses</key>
 <array>
  <dict>
   <key>ImagePath</key>
   <string>SyncDataClass.tiff</string>
   <key>Name</key>
   <string>com.mycompany.knoma</string>
  </dict>
 </array>
 <key>Name</key>
 <string>com.mycompany.knoma</string>
 </dict>
 </plist>

Код, отвечающий за запуск синхронизации, следующий:

- (IBAction)startSync:(id)sender {
  ISyncClient * client = [self syncClient];

  [[[self managedObjectContext]persistentStoreCoordinator]syncWithClient:client
                 inBackground:YES
               handler:self
              error:nil];
}

- (ISyncClient *)syncClient
{
    NSString *clientIdentifier = [[NSBundle mainBundle] bundleIdentifier];
    NSString *reason = @"Unknown Error";
ISyncClient *client;

@try {
    client = [[ISyncManager sharedManager] clientWithIdentifier:clientIdentifier];
    if (client == nil) {
        if (![[ISyncManager sharedManager] registerSchemaWithBundlePath:[[NSBundle mainBundle]pathForResource:@"KnomaSchema" ofType:@"syncschema"]]) {
            reason = @"Can't register sync schema";
        } else {
            client = [[ISyncManager sharedManager] registerClientWithIdentifier:clientIdentifier descriptionFilePath:[[NSBundle mainBundle] pathForResource:@"ClientDescription" ofType:@"plist"]];
            [client setShouldSynchronize:YES withClientsOfType:ISyncClientTypeApplication];
            [client setShouldSynchronize:YES withClientsOfType:ISyncClientTypeDevice];
            [client setShouldSynchronize:YES withClientsOfType:ISyncClientTypeServer];
        }
    }
}
@catch (id exception) {
    client = nil;
    reason = [exception reason];
}

if (client == nil) {
    NSRunAlertPanel(@"You can't sync.", [NSString stringWithFormat:@"Registration Failed: %@", reason], @"OK", nil, nil);
}

return client;
}

Должна быть довольно очевидная проблема, так как Google выдает только один результат, которому почти пять лет, и он не очень полезен.


person Mee    schedule 11.07.2010    source источник


Ответы (1)


Несколько вещей, чтобы проверить:

  1. Проверьте свою модель данных и убедитесь, что в ней нет опечаток.
  2. Проверьте и убедитесь, что ваш .syncschema имеет правильный относительный путь к файлу.
person Marcus S. Zarra    schedule 13.07.2010