對我來說,我似乎很瘋狂,我的應用程序中的所有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. 核心數據以編程方式訪問Z_PRIMARYKEY的Z_MAX數據
- 3. 在位置後臺模式下從核心數據訪問數據
- 4. setPersistentStoreCoordinator核心數據不良訪問
- 5. 核心數據原始訪問器
- 6. 核心數據模型版本問題
- 7. 如何評論核心數據模式?
- 8. 使用Ghost模式的核心數據?
- 9. 核心數據代表保存模式
- 10. 建模到核心數據
- 11. 核心數據模型
- 12. iPhone - 核心數據問題?
- 13. 核心數據問題
- 14. iPhone核心數據問題
- 15. 核心數據問題
- 16. 核心數據:「insertNewObjectForEntityForName」問題
- 17. 核心數據NSFetchRequest問題
- 18. iPhone - 核心數據問題?
- 19. 核心數據 - NSFetchRequest問題
- 20. 核心數據問題Swift
- 21. 核心數據疑問
- 22. 核心數據問題 - EXC_BAD_ACCESS
- 23. 核心數據問題
- 24. 核心數據問題
- 25. 如何訪問核心數據中的數據
- 26. Objective-C核心數據:從子女的孩子訪問數據
- 27. 快速訪問核心數據數據庫信息?
- 28. 核心數據支持的非核心數據數據UITableView
- 29. 的CocoaPods /訪問自己的核心數據模型
- 30. 是實現數據映射器模式的核心數據嗎?
你不能只是這些視圖控制器的內容綁定到一個單獨的控制器處理所有的提取請求的,他們緩存如果可能? –