0

各モデルがどのモデルに基づいているかを確認し、場合によっては変更したいと思います。Xcodeでこれを行う場所を見つけることができませんでした。新しいモデルバージョンを作成し、それが基づいているモデルを選択すると([エディタ/モデルバージョンの追加...]を使用し、[モデルに基づく]ドロップダウンで前のモデルを選択する)、方法がないようです。選択内容を確認するか、変更してください。

.xcdatamodeldファイルと.xcdatamodelファイルはパッケージであり、右クリックして[パッケージの内容を表示]をクリックすると、それらを調べることができます。.xcdatamodelファイルには「contents」という名前のXMLファイルが含まれていますが、以前のモデルのバージョンはないようです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1811" systemVersion="11G63" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
    <entity name="Settings" syncable="YES">
        <attribute name="filterOrderArray" optional="YES" attributeType="Transformable" syncable="YES"/>
    </entity>
    <elements>
        <element name="Settings" positionX="160" positionY="192" width="128" height="60"/>
    </elements>
</model>

また、プロジェクトの.xcodeprojファイル(これもパッケージ)を調べたところ、project.pbxprojファイルに次のものが含まれていることがわかりました。

/* Begin XCVersionGroup section */
        CFE0A83E164F6CF40000C765 /* Filters.xcdatamodeld */ = {
            isa = XCVersionGroup;
            children = (
                CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel */,
                CFE0A83F164F6CF40000C765 /* Filters 1.2.xcdatamodel */,
            );
            currentVersion = CFE0A841164F6D100000C765 /* Filters 1.3.xcdatamodel     */;
            path = Filters.xcdatamodeld;
            sourceTree = "<group>";
            versionGroupType = wrapper.xcdatamodel;
        };
/* End XCVersionGroup section */

繰り返しになりますが、これらの16進文字列でない限り、以前のバージョン情報はありませんが、Xcode / Project Navigationの.xcdatamodelファイルの順序は、「children」パラメーターによって決定されるようです。

また、モデルバージョンの名前を変更すると、以前のバージョンの接続が切断され(バージョンの順序だけでなく、どこかに保存されていることを示します)、initWithContentsOfURLがnilモデルを返すこともわかりました。

NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

したがって、私が知る限り、モデルが作成された後、モデルがどのモデルに基づいているかを表示または変更することはできません。モデル階層をクリーンアップする必要がある場合は、効果的に最初からやり直して、必要な各バージョンを再作成する必要があります(少なくとも、古いモデルからエンティティをコピーできるため、完全に最初からやり直す必要はありません)。

4

1 に答える 1

0

モデルの新しいバージョンを追加すると、モデルに変更を加えることができます。以前のバージョンは、コアデータが以前のバージョンで作成された永続ストアを自動的に移行できるようにするためのものです。古いバージョンを編集すると、この移行は中断されます。次に、実際には接続されていない名前の変更について話し始めます。バージョンが基づいているモデルを変更することについて話すのは意味がありません-それは同じモデルの単なる新しいバージョンです。

マルチバージョンモデルを作成したら、プロジェクトブラウザでモデルごとに開示の三角形を展開することで、バージョンIIRCを参照できます。

于 2012-11-11T07:47:25.800 に答える