簡體   English   中英

iOS核心數據-獲取結果

[英]iOS Core Data - fetching results

我的數據模型是多層的。 讓我舉一個例子來演示數據模型。

我有三個實體,分別是X,Y和Z。

X可以有1個或多個Y。

Y僅與1 X關聯。

Y可以有1個或多個Z。

Z僅與1 Y關聯。

現在我的頂級tableview控制器-控制器A使用fetchedResults控制器從核心數據中獲取所有X

當用戶選擇特定的行時,他/她選擇一個特定的X,我從中獲得該X下所有Y的列表。 傳遞給控制器​​B的特定Y。 我還將托管對象的上下文從A傳遞到B。

在BI中,希望能夠以某種順序顯示與Y相關聯的所有Z。 目前,我發現該順序指示最近使用的Z。 我想要相反的順序。

如何指定(就核心數據而言)能夠對此特定Y采取行動並根據特定標准獲得結果? 到目前為止,我所見過的所有核心數據示例均從頭開始,如下所示

NSManagedObjectContext *context = <#Get the context#>;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"<#Entity name#>"
    inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#Sort key#>"
    ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // Handle the error
}

[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];

一種解決方案是不使用NSFetchedRequest,而是對傳遞的Y對象進行操作並對NSArray進行排序。

NSAssert1(yObject!=nil,@"yObject is null",1);
NSSet *zObjects = yObject.zobjectsinY;
NSArray *zObjectArray = [zObjects allObjects] ; 
sortedQZArray = [zObjectArray sortedArrayUsingFunction:intSort context:NULL];

我覺得這不是一個很好的解決方案,應該有更好的方法來查詢這些結果。

另外一個選擇是能夠在創建數據時按預期順序插入這些值? 如何為要插入實體對象中的記錄指定順序?

提前致謝

如果您得到想要的排序順序的反序,只需反序即可accending; 排序參數。

如何為要插入實體對象中的記錄指定順序?

你不能 排序被認為是接口的屬性(因為相同的數據可能以許多不同的順序出現),因此托管對象將保持無序設置,直到使用排序描述符獲取它們為止。

如果要在數據中保存某種順序,則必須使用屬性或關系對順序進行建模。 但是,通常情況下,您希望保留“虛擬”訂單,因為該訂單僅在用戶界面中按需要顯示。

要獲得更復雜的排序,請使用比較器塊創建排序。 警告這些會在內存和周期上產生意外的繪制,因此請謹慎使用它們。

您還可以為自定義NSManagedObject子類創建比較函數,該函數將以您希望的方式比較該類的任何兩個對象。 通常這不是必需的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM