菜鸟教程小白 发表于 2022-12-12 17:55:40

ios - 获取有关 iCloud 中文件更改的通知


                                            <p><p>我在两个不同的设备上创建了一个名为 <code>File - 1.jpg</code> 的文件,并将其放入 iCloud 容器中。 </p>

<p>我不使用 <code>UIDocument</code>,即使我尝试使用它,它也不会产生冲突。相反,我看到的是 iCloud 正在自动重命名和移动文档。 </p>

<p>所以上传一个或另一个文件后变成<code>File - 2.jpg</code>。这一切都很好,但现在我没有对文件的引用,所以我不知道哪个是哪个...</p>

<p>有什么方法可以在应用程序端获得通知,文件在 iCloud 中被重命名/移动/删除?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>最终,我必须创建一个实现 <code>NSFilePresenter</code> 的类并将其指向 iCloud 容器文件夹。</p>

<p>来自 iCloud 的实时更新可能会很晚,并且仅在 iCloud 提取元数据时才会发生。</p>

<p>此外,我必须将每个创建的文件与每个设备和 iCloud 帐户相关联并保留这些数据,在我的情况下是 CoreData。这就是 <code>ubiquityIdentityToken</code> 变得有用的地方。 </p>

<p>iCloud 容器中的所有文件操作都应该使用 <code>NSFileCoordinator</code> 进行。</p>

<p>对于添加/删除事件,最好使用 <code>NSMetadataQuery</code>,<code>NSFileCoordinator</code> 根本不会报告这些,但对于检测文件何时移动仍然很有用,这就是元数据查询报告为更新。</p>

<p>这是一个非常基本的样板,可以用作起点:</p>

<pre><code>@interface iCloudFileCoordinator () &lt;NSFilePresenter&gt;

@property (nonatomic) NSString *containerID;
@property (nonatomic) NSURL *containerURL;

@property (nonatomic) NSOperationQueue *operationQueue;

@end

@implementation iCloudFileCoordinator

- (instancetype)initWithContainerID:(NSString *)containerID {
    self = ;
    if(!self) {
      return nil;
    }

    self.containerID = containerID;
    self.operationQueue = [ init];
    self.operationQueue.qualityOfService = NSQualityOfServiceBackground;

    ;

    return self;
}

- (void)dealloc {
    ;
}

- (void)addFilePresenter {
    ;
}

- (void)removeFilePresenter {
    ;
}

#pragma mark - NSFilePresenter
#pragma mark -

- (NSURL *)presentedItemURL {
    NSURL *containerURL = self.containerURL;

    if(containerURL) {
      return containerURL;
    }

    NSFileManager *fileManager = [ init];

    containerURL = ;

    self.containerURL = containerURL;

    return containerURL;
}

- (NSOperationQueue *)presentedItemOperationQueue {
    return self.operationQueue;
}

- (void)presentedSubitemAtURL:(NSURL *)oldURL didMoveToURL:(NSURL *)newURL {
    NSLog(@&#34;Moved file from %@ to %@&#34;, oldURL, newURL);
}

/*
... and other bunch of methods that report on sub item changes ...
*/

@end
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 获取有关 iCloud 中文件更改的通知,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34423110/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34423110/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 获取有关 iCloud 中文件更改的通知