Ошибка (ошибка LibrarianErrorDomain 2) при отключении синхронизации iCloud для файла UIDocument с помощью setUbiquitous - PullRequest
1 голос
/ 18 декабря 2011

Я сталкиваюсь с ошибкой при попытке отключить синхронизацию iCloud для файла UIDocument. Хотите знать, если кто-то еще столкнулся с этим. Вот сценарий:

Я создаю файл UIDocument локально в изолированной программной среде приложения, а затем выполняю следующий вызов, чтобы начать синхронизацию файла с iCloud:

[[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

Все идет гладко.

Теперь я хочу остановить синхронизацию iCloud для этого файла.

Сначала я проверяю, что файл хотя бы синхронизирован с iCloud, вызывая следующее:

- (BOOL) isDataFileSyncedWithCloud
{
    if (![self isICloudSupported] || ![self isUsingICloudForFiles])
        return NO;

    NSURL* file = [self getFileURLToCloudDatafile];
    NSNumber*  isInCloudNum = nil;

    if ([file getResourceValue:&isInCloudNum forKey:NSURLIsUbiquitousItemKey error:nil])
    {
        // If the item is in iCloud, see if it is downloaded and uploaded.
        if ([isInCloudNum boolValue])
        {
            NSNumber*  isDownloadedNum = nil;
            if ([file getResourceValue:&isDownloadedNum forKey:NSURLUbiquitousItemIsDownloadedKey error:nil])
            {
                NSNumber* isUploadedNum = nil;
                if ([file getResourceValue:&isUploadedNum forKey:NSURLUbiquitousItemIsUploadedKey error:nil])
                {                    
                    return ([isDownloadedNum boolValue] && [isUploadedNum boolValue]);
                }
            }
        }
    }

    return NO;
}

Вышеприведенное возвращает YES, указывая, что файл был синхронизирован (или я так думал ...)

Итак, я продолжаю и звоню ниже, чтобы остановить синхронизацию iCloud для этого файла:

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

и я получаю следующую ошибку: «Операция не может быть завершена. (Ошибка LibrarianErrorDomain 2 - Невозможно отключить синхронизацию для несинхронизированного элемента.)»

Есть идеи, почему возникает эта ошибка и как я могу от нее избавиться? Я бы подумал, что мой файл полностью синхронизирован ...

Заранее спасибо!

1 Ответ

2 голосов
/ 01 января 2012

Я понял это.Чтобы отключить синхронизацию iCloud, я случайно позвонил:

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:localPathURL destinationURL:cloudPathURL error:&error];

вместо

[[NSFileManager defaultManager] setUbiquitous:NO itemAtURL:cloudPathURL destinationURL:localPathURL error:&error];
...