作为初学者,我正在努力与iCloud合作.有一些样本,但它们通常非常详细(在开发者论坛上有一个用于iCloud和CoreData的大量).在苹果的文档都OK,但我仍然无法看到大局.所以请耐心等待,其中一些问题非常重要,但可能很容易回答.
上下文:我有一个非常简单的iCloud应用程序运行(下面的完整示例代码).只有一个UITextView显示给用户,他/她的输入保存在名为text.txt的文件中.

txt文件被推送到云端并可供所有设备使用.效果很好,但是:
主要问题:不使用iCloud的用户怎么办?
当我启动我的应用程序(请参阅下面的代码)时,我会检查用户是否启用了iCloud.如果启用了iCloud,一切都很好.该应用程序继续前进,在云端查找text.txt.如果找到,它将加载它并将其显示给用户.如果在云中找不到text.txt,它将只创建一个新的text.txt并将其显示给用户.
如果用户未启用iCloud,则不会发生任何事情.如何让非iCloud用户仍然可以使用我的文本应用程序?或者我只是忽略它们?我是否需要为非iCloud用户编写单独的功能?即我只是从文档文件夹中加载text.txt的函数?
处理iCloud中的文件的方式与处理应用程序沙箱中的所有其他文件的方式相同.
但是,在我的情况下,没有"正常"的应用程序沙箱了.它在云端.或者我是否总是首先从磁盘加载我的text.txt然后检查iCloud是否有更新的东西?
相关问题:文件结构 - 沙箱与云
也许我的主要问题是对iCloud应该如何工作的基本误解.当我创建一个UIDocument的新实例时,我将不得不覆盖两个方法.首先- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError从云端获取文件,然后-(id)contentsForType:(NSString *)typeName error:(NSError **)outError将文件导入云端.
我是否必须合并单独的功能,这些功能还会将text.txt的本地副本保存到我的沙盒中?这适用于非iCloud用户吗?据我了解iCloud,它会自动保存text.txt的本地副本.因此,我不应该需要将任何内容保存到我的应用程序的"旧"沙箱中(即过去曾经是旧的,在iCloud之前的日子).现在,我的沙箱完全是空的,但我不知道这是否正确.我应该在那里保留另一份text.txt吗?这感觉就像是混乱了我的数据结构...因为云中有一个text.txt,一个位于我设备上的iCloud沙箱中(即使我离线也会工作),还有一个位于旧沙箱中的第三个我的应用......
我的代码:一个简单的iCloud示例代码
这基于我在开发人员论坛和WWDC会话视频中找到的示例.我将它剥离到最低限度.我不确定我的MVC结构是否有用.该模型在AppDelegate中并不理想.欢迎任何改善它的建议.
编辑:我试图提取主要问题并发布[在这里].4
概述:

从云中加载text.txt的最重要的一点:
// AppDelegate.h
// iCloudText
#import <UIKit/UIKit.h>
@class ViewController;
@class MyTextDocument;
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
NSMetadataQuery *_query;
}
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@property (strong, nonatomic) MyTextDocument *document;
@end
// AppDelegate.m
// iCloudText
#import "AppDelegate.h"
#import "MyTextDocument.h"
#import …Run Code Online (Sandbox Code Playgroud)