0

我意識到這是相當長的,但我目前正在研究我的第一個CoreData項目,儘管閱讀了每一個資源,我仍然可以發現它並不全是沉沒的。到目前爲止,我已經保存並堅持所有好的,但我似乎無法讓關係正常工作。 我有一個表格視圖,顯示Exersize Categorys,它移動到一個顯示其關聯的Exersizes(一對多)的表格。CoreData:一對多關係顯示問題

(試圖張貼圖片,但我沒有足夠的代表處點還沒有),但數據模型看起來像這樣

ExersizeCategory < --- >> Exersize

從一切,我讀過我相信我可能需要使用謂詞來過濾結果,但我很困惑這是如何實際工作和天氣或不真實我甚至創建並保存適當的Exersize Categorys和Exersizes對象以使關係正常工作首先。

下面是我如何創建和保存(也設置它的名字文本框輸入)

ExersizeCategory *exersizeCategory = [NSEntityDescription insertNewObjectForEntityForName:@"ExersizeCategory" 
                     inManagedObjectContext:self.managedObjectContext]; 
    exersizeCategory.name = self.textField.text; 

    [self.managedObjectContext save:nil]; // write to database 

這裏是爲exersizes代碼(幾乎相同)

// Create a new instance of the entity 
    exersize = [NSEntityDescription insertNewObjectForEntityForName:@"Exersize" 
              inManagedObjectContext:self.managedObjectContext]; 

    exersize.name = self.textField.text; 

    [self.managedObjectContext save:nil]; // write to database 

雖然這似乎在創建對象,我看到他們在桌面上我還沒有實現coreDataGeneratedAccessors,如何以及在哪裏適合圖片?

@interface ExersizeCategory (CoreDataGeneratedAccessors) 
  • (無效)addExersizesObject:(Exersize *)值;
  • (void)removeExersizesObject:(Exersize *)value;
  • (void)addExersizes:(NSSet *)values;
  • (void)removeExersizes:(NSSet *)values;

我應該提到,我使用的CoreDataTableViewController類似乎減少了你需要編寫的代碼量來獲取(我通過一個教程發現我通過www.timroadly.com)創建由斯坦福大學。側記:如果不是繼承這個,只是使用標準方式,因爲我在.h中注意到它聲明其版權歸斯坦福,所以我不確定是否可以在我想要發佈的應用程序中使用它?

這裏是我當前如何獲取顯示Exersizes

- (void)setupFetchedResultsController { 
// 1 - Decide what Entity you want 
NSString *entityName = @"Exersize"; // Put your entity name here 
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName); 

// 2 - Request that Entity 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName]; 

// 3 - Filter it if you want 

//currently unsure about this! 
//request.predicate = [NSPredicate predicateWithFormat:@""]; 

// 4 - Sort it if you want 
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" 
                       ascending:YES 
                        selector:@selector(localizedCaseInsensitiveCompare:)]]; 
// 5 - Fetch it 
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                    managedObjectContext:self.managedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 
[self performFetch]; 

}

我知道我已經錯過了關鍵件落實這一點,但我只是不知道該在哪裏。 我只是在覈心數據了幾天,所以它一直非常沉重的學習!

謝謝任何​​能夠解決問題的人/答案/甚至將我推向正確的方向!

回答

0

f。滅亡,

你寫:

雖然這似乎是在創建對象的工作,我看到 他們在tableviews我還沒有落實 coreDataGeneratedAccessors,如何以及在哪裏做那些適合 圖片?

核心數據動態創建這些方法的實現。標題是爲了您的方便和編譯器類型檢查。

下面是一個簡單的謂詞來對你exersize實體找到一個鍛鍊的名字:​​

NSPredicate *p = [NSPredicate predicateWithFormat: @"%K == %@", @"name", @"Push Up"]; 

安德魯

附:你可能想糾正你的單詞練習的拼寫。

+0

你好安德魯對拼寫有好評,但爲了保持一致性,病態的保持不變。在嘗試了更多的東西和更多的閱讀之後,我相信我已經正確地讀取了,但是當我創建exersize對象時,我似乎無法將它放入關係中,因爲NSSet對exersizes的計數保持爲0。已經試過[exersizeCategory addExersizesObject:exersize];但這似乎並不奏效?我嘗試了所有我能找到的解決方案,但我仍然在某個地方出錯,是否有什麼地方顯然對你錯誤?再次感謝 – 2012-04-02 15:31:53

+0

f.perdition,每個CD關係都有相反的關係。因此,如果關係是一對多關係,而逆關係是一對一關係,那麼可以通過簡單的賦值來建立關係。如:'exercise.exercises = exercise;'。安德魯 – adonoho 2012-04-03 14:16:00

+0

安德魯,我似乎無法得到那個工作,與以前相同的問題。 exerciseCategory對象正在被創建並被顯示,因爲它們應該是練習本身。通過打印語句,我可以看到託管對象上下文正在傳遞和正在創建的東西,但NSSet保持空白,我也猜測這是因爲它提取相關的條目和作爲nothings已添加到它它沒有獲取。任何想法可能會發生什麼?我可以更新我的帖子,以顯示更多的代碼,如果它會幫助這種情況?歡呼的人! – 2012-04-05 15:30:25