首先,我应该提到这是我在这个网站上的第一篇文章。我试图教自己编程iOS,并在我的谷歌搜索找到答案,我发现我一直在这里指导。所以,感谢所有在这里做出贡献的人。你已经帮了我一吨。你如何处理UIManagedDocument?
我一直在经历斯坦福CS193P阶级,喜欢它。但我现在卡住了,不知道该在哪里转。
我的问题已经与UIManagedDocument。
我累了做一个简单的应用程序来测试我的新技能。这就是它的作用:
一个简单的会计应用程序,跟踪对募捐活动的个人贡献。
我有一个UITabBar,在每个选项卡上,您可以: 1.跟踪参与者(玩家) - 这将连接到地址簿,并允许您添加或保留在这个应用程序中。 2.管理事件(事件) - 您可以添加,编辑或删除事件,然后您将添加参与者,然后能够添加他们带来(银行)在该事件。 3.设置。 - 我添加了一些按钮,只是为了帮助我理清现在的情况,包括清除所有数据的重置按钮和“虚拟数据”按钮。
我有三个coreData实体。玩家,事件和银行都与其他两个人有关系。
当我第一次尝试将这个应用程式(预iOS5中)我用的appDelegate创建我ManagedObjectContext,并通过它我viewControllers。这工作。但现在我应该使用UIManagedObjectDocument,而不是使用AppDelegate。我相信我了解iCloud的原则和整合。 (我可能是错的)
使用类的例子和我可以在网上找到的东西我做了一个帮助程序类,它将在我的UINavigationControllers中提供每个ViewController的第一个ManagedDocument。
+ (UIManagedDocument *)sharedManagedDocument
{
static UIManagedDocument *sharedDocument = nil;
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"DefaultAppDatabase"];
// url is "<Documents Directory>/<DefaultAppDatabase>"
// Create the shared instance lazily upon the first request.
if (sharedDocument == nil) {
sharedDocument = [[UIManagedDocument alloc] initWithFileURL:url];
}
if (sharedDocument.fileURL != url) {
UIManagedDocument *newDocument = [[UIManagedDocument alloc] initWithFileURL:url];
sharedDocument = newDocument;
}
NSLog(@"SharedDocument: %@", sharedDocument);
return sharedDocument;
}
然后我有第一个ViewController打开文档并执行获取。
从那里,我通过什么NSManagedObject通过SEGUE选择下一个视图控制器。
问题是当我开始添加或重新设置数据时。 (我假设如果我能使它与“虚拟数据”按钮一起工作,我可以让它在单个条目中工作)当我按下“重置”或“虚拟”按钮时,我的日志告诉我它是推,但我没有看到任何数据的变化,直到我重新启动应用程序。然后它显示完美。我的猜测是我没有正确保存文件,或者我没有正确刷新tableViews。我对使用NSNotification做了一个小小的尝试,但是没有深入,因为我无法对它做出任何回应。如果需要的话,我很乐意回到那条路上。
这是我的保存方法?非常简单,只是从默认coreData的appDelegate复制。
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.appDatabase.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
[self.appDatabase saveToURL:self.appDatabase.fileURL
forSaveOperation:UIDocumentSaveForOverwriting
completionHandler:^(BOOL success){
if(!success) NSLog(@"failed to save document %@", self.appDatabase.localizedName);
if(success) NSLog(@"Success: save document %@", self.appDatabase.localizedName);
}];
}
保罗,从CS193P讲师,建议在作业6使用一个辅助方法通过一块周围的UIManagedDocument通过。我理解背后的理论,但还没有完全包围我的头,所以我没有排除我的答案也可能存在。
非常感谢您的帮助,或指引我在正确的方向做更多的研究。对不起,这篇文章太长了,我想尽可能清楚。