2010-01-05 77 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