2016-12-14 19 views
4

我在看教程(https://www.youtube.com/watch?v=qt8BNhpEAok)在Xcode 8中使用核心數據,並且視頻使用了Swift。他進入一個名爲任務實體的核心數據模型,然後在代碼中,他能夠調用任務,如:Xcode 8如何在Objective-C中使用核心數據代碼Gen類?

let task = Task(context: context) 

我所說的「標籤」的實體。我如何使用objective-c訪問代碼中的代碼? CodeGen在覈心數據模型中設置,但我沒有在我的項目中看到任何其他文件。如果我嘗試

Tag test = [[Tag alloc] init]; 

我收到一個Tag不存在的錯誤。

+0

如果你在你的項目中打開你的'xcdatamodeld'文件,並選擇你的「標籤」的實體,什麼是所選擇的代碼生成選項?如果它被設置爲「manual/none」,那麼當你構建你的項目時,NSManagedObject的子類將不會被生成。 –

+0

如果它被設置爲「類定義」,那麼當您構建項目時將爲您生成「NSManagedObject」子類,但它們不會顯示在您的項目中。 –

+0

@RyanH。它被設置爲「Class Defintion」。如果它在項目中,我如何訪問它們?我在選項中選擇了全局命名空間,所以我想我可以只說標籤並將它顯示爲一個類。我需要在頭文件中導入一些東西嗎? – SolidSnake4444

回答

2
  1. 在模型編輯器中選擇實體'標籤'。

  2. 通過選擇菜單樹'編輯器' - >'創建NSManagedObject子類...' 然後按照說明生成任務的源代碼。

'標籤+ CoreDataClass.h'

'標籤+ CoreDataClass.m'

'標籤+ CoreDataProperties.h'

'標籤+ CoreDataProperties.m'

文件將被創建並自動附加到您的項目。

  1. 導入頭文件。

#import "Tag+CoreDataProperties.h"

  • 然後創建 '標籤' 類。
  • NSManagedObjectContext* wContext = ((AppDelegate*)UIApplication.sharedApplication.delegate).persistentContainer.viewContext; Tag* w Tag = [ [ Tag alloc ] initWithContext: wContext ]; wTag.name = @"TEST";

    +0

    這是否將標籤直接插入數據庫? initWithContext行。 – SolidSnake4444

    +0

    我最終不需要做第2步。我需要的魔法是第3步,我不知道那個課程是創建的。我猜第2步可能會讓它出現在項目中。第4步確實將標籤插入到數據庫中,所以一切都按照我認爲的方式工作。謝謝。 – SolidSnake4444

    4

    如果代碼生成被設置爲「類定義」,然後你可以導入實體NSManagedObject子頭文件。

    導入:

    #import "Tag+CoreDataClass.h" 
    

    那麼你Tag對象的創建將被識別。

    Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[self managedObjectContext]; 
    tag.name = @"Tag Name"; 
    

    注:如果你想看到代表您生成的文件,你可以檢查DerivedData文件夾爲您的項目。您不應該編輯這些文件或將它們導入到您的項目中。

    喜歡的東西:

    /Users/{Username}/Library/Developer/Xcode/DerivedData/{Your Project Name}/Build/Intermediates/{Your Project Name}.build/Debug-iphonesimulator/{Your Project Name}.build/DerivedSources/CoreDataGenerated/{Your Project Name}/

    有跡象表明,提供取決於你的使用情況不同選擇其他代碼生成選項:

    • 無/手動:允許你管理自己的NSManagedObject子類。使用此選項,您將看到項目中的文件,並且可以修改它們。
    • 類別/擴展:允許您擁有不希望核心數據管理的自定義屬性(屬性)。

    我張貼關於代碼生成選擇這裏更詳細的解答:https://stackoverflow.com/a/40647786/4748172