对我来说,我似乎很疯狂,我的应用程序中的所有NSFetchRequests都分布在不同的视图控制器中,是否有一个好的数据访问模式,可以将我需要的数据放在一个地方?核心数据数据访问模式?
4
A
回答
5
我同意这有点多,幸运的是Core Data有Active Record。这使得获取不那么单调乏味,例如,取出由核心数据的所有Person对象会是这么简单
NSArray *people = [Person findAll];
+0
我们已经在实时应用中使用它。它大大简化了我们的核心数据代码。 –
1
是有,它被称为facade pattern。只需您NSManagedObject
子类中定义一个公共方法,如下所示:
@interface Group : NSManagedObject { }
// … cruft here …
-(NSArray*)peopleSortedByName;
@end
和隐藏讨厌实现像这样:
-(NSArray*)peopleSortedByName;
{
NSFetchRequest* request = // … bla bla, lots of code here
return [[self managedObjectContext] executeFetchRequest:request
error:NULL];
}
然后使用方法一样,如果它在你的代码的任何其它类。写一次,无处不在。
0
为NSManagedObject上下文定义一个类别方法,该方法将一般查询包装为一行。
@interface NSManagedObjectContext(MyQueryAdditions)
-(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr;
@end
@implementation NSManagedObjectContext(MyQueryAdditions)
-(NSArray *)queryEntityForName:(NSString *)name predicateFormat:(NSString *)pstring argumentArray:(NSArray *)arr
{
NSEntityDescription *entity = [NSEntityDescription entityForName:name inManagedObjectContext:self];
NSFetchRequest *fetch = [[[NSFetchRequest alloc] init] autorelease];
[fetch setEntity:entity];
NSPredicate *pred;
if(pstring)
{
if(arr) pred = [NSPredicate predicateWithFormat:pstring argumentArray:arr];
else pred = [NSPredicate predicateWithFormat:pstring];
[fetch setPredicate:pred];
}
NSError *error = nil;
[self retain];
[self lock];
NSArray *results = [self executeFetchRequest:fetch error:&error];
if (error) {
NSLog(@"MOC Fetch - Unresolved error %@, %@", error, [error userInfo]);
results = [NSArray array];
}
[self unlock];
[self release];
return results;
}
@end
意味着基本所有项目的查询可以是简单的
NSArray *cres = [managedObjectContext queryEntityForName:@"Person" predicateFormat:nil argumentArray:nil];
相关问题
- 1. 使用核心数据访问远程数据的模式?
- 2. 核心数据DAO模式
- 3. 核心数据以编程方式访问Z_PRIMARYKEY的Z_MAX数据
- 4. 在位置后台模式下从核心数据访问数据
- 5. setPersistentStoreCoordinator核心数据不良访问
- 6. 核心数据原始访问器
- 7. 核心数据模型版本问题
- 8. 核心数据代表保存模式
- 9. 如何评论核心数据模式?
- 10. 使用Ghost模式的核心数据?
- 11. 核心数据模型
- 12. 建模到核心数据
- 13. 核心数据问题
- 14. 核心数据问题 - EXC_BAD_ACCESS
- 15. 核心数据NSFetchedResultsControllerDelegate问题
- 16. 核心数据NSFetchRequest问题
- 17. 核心数据问题Swift
- 18. 核心数据疑问
- 19. 核心数据问题
- 20. 核心数据:“insertNewObjectForEntityForName”问题
- 21. iPhone核心数据问题
- 22. iPhone - 核心数据问题?
- 23. iPhone - 核心数据问题?
- 24. 核心数据问题
- 25. 核心数据 - NSFetchRequest问题
- 26. Objective-C核心数据:从子女的孩子访问数据
- 27. 加密通过核心数据访问的Sqlite数据库
- 28. 如何访问核心数据中的数据
- 29. 核心数据:访问属性原始数据
- 30. 快速访问核心数据数据库信息?
你不能只是这些视图控制器的内容绑定到一个单独的控制器处理所有的提取请求的,他们缓存如果可能? –