2010-01-05 102 views
0

我正在使用核心數據,我有一個名爲SID的屬性和另一個名爲ParentSID的實體。可可iPhone遞歸陣列

我試圖創造一個我可以從一組傳遞一個獲取對象的方法,它會通過檢查每個祖先的ParentSID返回該對象的血統。

如果ParentSID> 0,它應遞歸循環,直到找到ParentSID爲0的祖先爲止。每次它循環時,都應該將祖先添加到沿襲數組中。

如果ParentSID爲0,則完成後應返回lineage數組。

不確定這是否有意義。

感謝, 豪伊

回答

1

SIDParentSID關係或屬性?你所描述的情況聽起來像是作爲一種關係來實現更有意義。這樣,您可以通過執行此操作來獲取父對象:[object valueForKey:@"parentSID"]。否則,你需要做一個整體的讀取請求是這樣的:

NSFetchRequest *parentFetchRequest = [[NSFetchRequest alloc] init]; 
[parentFetchRequest setEntity:[NSEntityDescription entityForName:@"SID" inManagedObjectContext:managedObjectContext]; 
[parentFetchRequest setPredicate:[NSPredicate predicateWithFormat:@"parentSID == %@", [object valueForKey:@"parentSID"]]; 
NSArray *parents = [managedObjectContext executeFetchRequest:parentFetchRequest error:nil]; 
[parentFetchRequest release]; 
if ([parents count] == 0) { 
    // TODO: Handle this error 
    return; 
} 

NSManagedObject *parentSID = [parents lastObject]; 
// Now, at long last, you have a reference to the parent object. 

爲了回答您的具體問題,我不會做這樣的遞歸方法。你可以很容易地做到這一點迭代。例如:

NSManagedObject *sid = // get the original object 
NSMutableArray *lineage = [NSMutableArray array]; 
while (sid) { 
    NSMutableObject *parent = // get the parent using one of the techniques above 
    if (parent) 
     [lineage addObject:parent]; 
    sid = parent; 
} 
+0

感謝您的快速響應。 SID和父SID是屬性。我有一個返回所有記錄的請求。我的想法是將該方法傳遞給一個子對象並讓它循環遞歸。每次循環時,都會查看所有記錄以查找當前對象的新父項。 我將嘗試使用while語句的方法來代替。 謝謝, Howie – Ward 2010-01-05 17:30:00

+0

只是看看內存使用情況。無論您認爲您擁有多少數據,請將其乘以10,因爲這就是您的用戶將投入您的應用程序的多少。 – Alex 2010-01-05 20:13:28

+0

感謝您的提示 – Ward 2010-01-05 21:29:08