3

こんにちは、OSX で magicRecord を使用してエンティティを作成する際に問題が発生しています。モデルと NSManagagedSubclasses などを作成しています。しかし、このコードを applicationDidFinishLaunching で実行すると (magicialRecord 2.2 を使用しています):

[MagicalRecord setupCoreDataStack];
Person * person = [Person MR_createEntity];
person.name = @"alex";

ログにこれを取得します:

2013-10-06 18:01:54.320 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x7fff71a96238) -> Created Context UNNAMED
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x7fff71a96238) Set Root Saving Context: <NSManagedObjectContext: 0x101924d00>
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x7fff71a96238) Created Main Queue Context: <NSManagedObjectContext: 0x1001564a0>
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x7fff71a96238) Set Default Context: <NSManagedObjectContext: 0x1001564a0>
2013-10-06 18:01:54.322 TestMagicalRecord[7554:303] +entityForName: could not locate an entity named '(null)' in this model.

IOS プロジェクトで同じコードを実行すると、問題なく実行されます。OSX のサンプル コードを見つけようとしましたが、うまくいきませんでした。違いはありますか?

Magical record Github レポジトリの Mac サンプル コードにはプロジェクトしか含まれていませんが、他のリソースでそれを実行する方法はありますか?

簡単な解決策だと思いますが、Docs/SOで機能するものは見つかりません。

4

4 に答える 4

2

途中で気づいたように、これは Magical Record の開発ブランチのバグです。

開発ブランチの 2.2 バージョンでMR_createEntityは、次のメソッドを使用して、作成する必要があるオブジェクトのエンティティ名を決定します。

+ (NSString *) MR_bestGuessAtAnEntityName
{
    if ([self respondsToSelector:@selector(entityName)])
    {
        return [self performSelector:@selector(entityName)];
    }
    return NSStringFromClass(self);
}

しかし (少なくとも OS X 10.8 では)、NSObject実際には に応答entityName、そのメソッドを呼び出すと が返されますnil。これに関するドキュメントが見つからなかったため、これはドキュメント化されていない内部メソッドである可能性があります。

しかし、その効果は をMR_bestGuessAtAnEntityName返すことnilであり、したがって

+ (id) MR_createInContext:(NSManagedObjectContext *)context
{
    return [NSEntityDescription insertNewObjectForEntityForName:[self MR_bestGuessAtAnEntityName] inManagedObjectContext:context];
}

エラーメッセージで失敗します

+entityForName: このモデルで「(null)」という名前のエンティティが見つかりませんでした。

したがって、これは Magical Record のバグであり、メンテナに報告する価値があります。iOSではNSObject(or NSManagedObject) が応答しないため、このバグは OS X でのみ発生します。entityName

于 2013-10-06T17:59:29.853 に答える
0

モデル ファイルがターゲットの一部としてコンパイルされていることを確認します。これを確認するには、プロジェクト ナビゲーターで xcdatamodel ファイルを選択し、インスペクター領域でそのファイルが属するターゲットを探します。または、ビルド設定を確認して、このファイルがコンパイル ファイル セクションにあることを確認します。

于 2013-10-06T16:54:24.777 に答える
0

問題は、Github の適切なブランチを使用しなかったことです。マスター ブランチの代わりに開発ブランチを使用していました。これが、この愚かな間違いを犯した他の人の助けになることを願っています...

于 2013-10-06T17:16:05.540 に答える