Как прочитать конфликтующий UIDocument из неразрешенного ConflictVersionsOfItemAtURL:

Когда в UIDocument возникает конфликт, я могу получить всю конфликтующую версию, вызвав unresolvedConflictVersionsOfItemAtURL: на NSFileVersion, но как я могу получить UIDocument (моментальный снимок) этих версий?

Я хочу зациклить все версии и объединить их самостоятельно.

Обновлено Я столкнулся с этим Как я могу объединить конфликтующие UIDocument в iCloud? и попытаться сделать это так, но я не думаю, что это правильно, потому что открытый UIDocument является асинхронной операцией. Как правильно это сделать?

    NSFileVersion *currentVersion = [NSFileVersion currentVersionOfItemAtURL:senderDocument.fileURL];
    NSArray *conflictedVersions = [NSFileVersion unresolvedConflictVersionsOfItemAtURL:senderDocument.fileURL];
    RecentDocument *currentDocument = [[RecentDocument alloc] initWithFileURL:currentVersion.URL];
    [currentDocument openWithCompletionHandler:^(BOOL success) {
        if (!success) {
            NSLog(@"Failed to open");
            return ;
        }
        for (NSFileVersion *version in conflictedVersions) {
            RecentDocument *conflictedDocument = [[RecentDocument alloc] initWithFileURL:version.URL];
            [conflictedDocument openWithCompletionHandler:^(BOOL success) {
                if (!success) {
                    NSLog(@"Failed to open");
                    return ;
                }
            }];
        }
    }];

person sarunw    schedule 31.12.2013    source источник
comment
При чем тут UIDocument асинхронность открытия? NSFileVersion — это то, как вы находите конфликтующие версии, а UIDocument — то, как вы их открываете (если вам нужно их открыть). Если вам нужна дополнительная информация, см. руководство Рэя Вендерлиха. .   -  person Tom Harrington    schedule 04.01.2014
comment
В моем примере кода я получил все конфликты NSFileVersion, но чтобы прочитать его содержимое (чтобы самостоятельно объединить данные), мне нужно открыть его, что является асинхронной операцией. В ссылке вы узнаете, как вручную показать конфликт, который не отвечает на вопрос.   -  person sarunw    schedule 05.01.2014


Ответы (1)


Вместо вызова openWithCompletionHandler вы хотите сделать что-то вроде:

RecentDocument * thisDoc = [[RecentDocument alloc] initWithFileURL:url];
NSError* innerReadError;
[thisDoc readFromURL:url error:&innerReadError];

Поэтому замените openWithCompletionHandler на readFromURL, и вы сможете сразу же получить доступ к своему документу, чтобы разрешить конфликт.

person Steven Craft    schedule 11.11.2014