Mic*_*iZH 5 core-data objective-c ios uimanageddocument
我已经完成了斯坦福大学的课程,并按照讲座中的步骤设置了我的第一个应用程序和核心数据。大约是这样(我现在将代码转移到应用程序委托中):
- (void)setupFetchedResultsController
{
NSError *error = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MainCategory"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES]];
[self.budgetDatabase.managedObjectContext executeFetchRequest:request error:&error];
self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:self.budgetDatabase.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
}
-(void)useDocument
{
if(![[NSFileManager defaultManager]fileExistsAtPath:[self.budgetDatabase.fileURL path]]){
[self.budgetDatabase saveToURL:self.budgetDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
[self setupFetchedResultsController];
}];
} else if (self.budgetDatabase.documentState == UIDocumentStateClosed){
[self.budgetDatabase openWithCompletionHandler:^(BOOL success){
[self setupFetchedResultsController];
}];
} else if (self.budgetDatabase.documentState == UIDocumentStateNormal){
[self setupFetchedResultsController];
}
}
- (void)viewWillAppear:(BOOL)animated
{
//Initialize database
[super viewWillAppear:animated];
if(!self.budgetDatabase){
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentationDirectory inDomains:NSUserDomainMask] lastObject];
[url URLByAppendingPathComponent:@"BudgetDatabase"];
self.budgetDatabase = [[UIManagedDocument alloc]initWithFileURL:url];
}
}
Run Code Online (Sandbox Code Playgroud)
Apple模板中的代码(如果在创建Xcode项目时选中“ CoreData”,则看起来非常不同且更加复杂)。这有什么区别UIManagedDocument?有更好还是更坏?
我个人也按照UIDocument斯坦福课程的建议从上下文开始,这对于简单的应用程序很有好处,也是最简单的开始方法。当我的应用程序增长并且我需要访问整个应用程序的核心数据时,我必须处理用于在应用程序的不同生命阶段访问/打开/创建文档的额外代码。
然后我转向了 Apple 模板,对此我感到非常高兴。无论如何,一切都在appDelegate。我建议您阅读本文,以处理具有父子关系的后台线程上的核心数据Multi-Context CoreData。
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |