2013-11-25 22 views
0

我有四個表。這是我的表結構NSFetchResultController - 一對多關係

法師> ---- >>項目> ---- >>任務> ---->文件

我使用NSFetchResultController來從數據庫對象。根據項目的任務數量,任務將加載到tableview中。 (目前只有一個項目)

我可以用下面的代碼來獲取任務對象

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Tasks" inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
           initWithKey:@"taskId" ascending:NO]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
    [fetchRequest setFetchBatchSize:20]; 

NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
             managedObjectContext:context sectionNameKeyPath:nil 
                cacheName:@"Root"]; 
    self.fetchedResultsController = theFetchedResultsController; 
    _fetchedResultsController.delegate = self; 

返回的任務數,我可以這樣使用。

id sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section]; 

但我需要從頂級對象,如碩士 - >>項目 - >>任務。我如何實現頂級對象而不是在FetchResultController中使用「任務」。

即,

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     NSEntityDescription *entity = [NSEntityDescription 
             entityForName:@"Master" inManagedObjectContext:context]; 
     [fetchRequest setEntity:entity]; 

我沒有在船長的任何ID進行排序。師父與項目有一對多的關係。

+0

那麼,這裏的實際問題訪問任務的主要對象?獲取任務或對它們進行排序? – Suhas

+0

我需要取得像這個master.projects.tasks,而不是使用任務 –

+0

是的,你是對的,你可以從你建立的關係做到這一點..我仍然不明白的問題。 – Suhas

回答

0

沒有屬性的實體是一個糟糕的設計決定。屬性用於區分各種對象,而不具有這意味着實際上只有一個「主」對象,並且所有「項目」實例都與此相關。

所以,我想強調的第一點是除去主實體且僅當一些未知的原因,你想保持「大師」有「項目」和「任務」

。以下是如何訪問單個對象。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Master"]; 
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

返回數組包含使用,你可以如下

Master *master = [results lastObject]; 
NSSet *tasks = master.projects.tasks;