そのため、Core Data モデルをコードに変換して、静的ライブラリに簡単に収まるようにしました。残念ながら、スムーズな変換ではありません。
gameToPlayer という名前の別のクラスの関係として新しいプレーヤーを挿入しようとすると、このエラーが発生します。
Unacceptable type of value for to-one relationship: property = "player"; desired type = (null); given type = Player; value = <Player: 0x178ba9e0>
GameToPlayer の作成は次のとおりです。
gameToPlayerEntity = [[NSEntityDescription alloc] init];
[gameToPlayerEntity setName:@"GameToPlayer"];
[gameToPlayerEntity setManagedObjectClassName:@"GameToPlayer"];
gameToPlayerPlayer = [[NSRelationshipDescription alloc] init];
[gameToPlayerPlayer setDestinationEntity:playerEntity];
[gameToPlayerPlayer setInverseRelationship:playerGames];
[gameToPlayerPlayer setDeleteRule:NSNullifyDeleteRule];
[gameToPlayerPlayer setOptional:YES];
[gameToPlayerPlayer setName:@"player"];
[gameToPlayerPlayer setMaxCount:1];
[gameToPlayerPlayer setMinCount:1];
そしてプレーヤーの作成:
playerEntity = [[NSEntityDescription alloc] init];
[playerEntity setName:@"Player"];
[playerEntity setManagedObjectClassName:@"Player"];
playerGames = [[NSRelationshipDescription alloc] init];
[playerGames setDestinationEntity:gameToPlayerEntity];
[playerGames setInverseRelationship:gameToPlayerPlayer];
[playerGames setDeleteRule:NSCascadeDeleteRule];
[playerGames setName:@"games"];
[playerGames setOptional:YES];
[playerGames setMaxCount:0];
[playerGames setMinCount:0];
そして、クラッシュが発生している場所 (すべての NSLogs がこれを追跡するためにそれらを使用していたことをお詫びします) プレーヤーを設定した場所で停止します。
NSLog(@"Create the GameToPlayer");
GameToPlayer *orderObj = [NSEntityDescription insertNewObjectForEntityForName:@"GameToPlayer" inManagedObjectContext:[SDDataManager dataManager].managedObjectContext];
NSLog(@"Set the Game");
[orderObj setGame:newGame];
NSLog(@"Set the Player");
[orderObj setPlayer:player];
NSLog(@"Set the Order");
[orderObj setOrder:[NSNumber numberWithInt:[selectedPlayers indexOfObject:player]]];
NSLog(@"Add to Array");
[orderObjs addObject:orderObj];
今、私は実際に問題を知っていると思います。私の ManagedObjectModel のカスタム初期化。gameToPlayerEntity は playerEntity の前に作成されます。したがって、gameToPlayerEntity が作成されるとき、playerEntity は実際には NULL です。ただし、ファイル内の何かを変更すると、既存のデータベースをマップできなくなったように見えるため、単純に並べ替えたり、プロパティを作成したり、何かを修正したりすることはできません...
そして、問題になると予想されるxmlモデルのようなコードモデルをバージョン化する方法を示すドキュメントのどこにも見つかりません。ヘルプやヒントをいただければ幸いです。これを機能させる方法を理解しようとしています。
アップデート
この変換の前に、私はすでに軽量の移行を使用しており、データベースの 4 回目の反復を行っていたことに言及する価値があると考えました。
更新 2
私は完全に最初からやり直すことで、それを機能させることができました。投稿されたものから先に進もうとする代わりに。各エンティティが必要なときに一度だけ作成されるように、すべてがプロパティに変換されています。これは、ビジュアル モデルからコード モデルへの変換として機能します。ただし、このモデルが必然的に変更される将来、バージョニングを理解する必要があることは間違いありません。バージョン管理は、まずこの問題の根源です。したがって、xcode インターフェイスを使用せずにバージョン管理を行う方法について誰かが光を当てることができれば、私はあなたの考えを聞きたいです。