正确处理在您的应用程序的另一个实例中使用 iCloud 删除 UIDocument

Posted

技术标签:

【中文标题】正确处理在您的应用程序的另一个实例中使用 iCloud 删除 UIDocument【英文标题】:Correct handling of deletion of a UIDocument in another instance of your app with iCloud 【发布时间】:2013-03-14 07:51:46 【问题描述】:

我发现,我可以通过以下方法检测到 iCloud 上 UIDocument 的删除:

- (void)accommodatePresentedItemDeletionWithCompletionHandler:(void (^)(NSError *))completionHandler

这个方法被正确调用了,但我不知道在这个方法中做什么。 在我关闭文档的那一刻,如果它仍然打开,但看起来文档在关闭时保存在旧路径上,所以文档重新出现。

我已经进行了大量搜索,但在 Apple 文档和任何论坛中都没有找到任何内容。

有没有人有类似的经历或者有人正确处理了删除?

【问题讨论】:

看起来 Apple 的 Lister 示例应用程序只是关闭了视图控制器而不关闭文档。 【参考方案1】:

我发现,我关闭了文档 2 次,在第二次关闭它之前,我保存了它。 我删除了 saveToURL 方法,现在它可以按预期工作了。

对于所有想要检测删除的人: 使用以下代码在 UIDocument 的子类中覆盖此方法:

    - (void)accommodatePresentedItemDeletionWithCompletionHandler:(void (^)(NSError *errorOrNil))completionHandler

    sceneLampDocument* presentedDocument = self;
    [presentedDocument closeWithCompletionHandler: ^(BOOL success) 
        NSError* error = nil;
        if (!success)
        
            NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys:
                                      @"Could not close document that is being deleted on another device",
                                      NSLocalizedDescriptionKey, nil];
            error = [NSError errorWithDomain: @"some_suitable_domain"
                                        code: 101
                                    userInfo: userInfo];
        

        completionHandler(error);  // run the passed in completion handler (required)

        dispatch_async(dispatch_get_main_queue(), ^
                       
                           //[super accommodatePresentedItemDeletionWithCompletionHandler:completionHandler];

                           NSDictionary *userInfo = [NSDictionary dictionaryWithObject:self forKey:@"document"];
                           [[NSNotificationCenter defaultCenter] postNotificationName: @"documentDeletedOnAnotherDevice"
                                                                               object: self
                                                                             userInfo: userInfo];
                       );
        ];

我希望这会对某人有所帮助

【讨论】:

感谢您发布此信息。 Apple 文档不太清楚UIDocument 是否会自行关闭,或者我应该在我的子类中这样做。顺便说一句,您可以收听UIDocumentStateChangedNotification 并检查documentState 是否包含UIDocumentStateClosed,而不是发布通知。要定义的通知少了一个:-)

以上是关于正确处理在您的应用程序的另一个实例中使用 iCloud 删除 UIDocument的主要内容,如果未能解决你的问题,请参考以下文章

上传应用程序时 iOS“在您的应用程序中找到的 URL 方案格式不正确”

如何仅使用代码在您的 iOS 应用程序中显示 ViewController?

terraform - 在您的集群中未找到任何容器实例

将图片发送到 Gmail 的另一种方式

在您的集群中未找到任何容器实例

如果没有在您的应用程序服务器上运行,为什么要使用Redis?