私は対多の関係が私のデータモデル内の私のエンティティPerson
とListItem
間listItems
と呼ばれる追加し、その後に成功selectedListItems
は型のオブジェクトの配列です関係を介してアクセスできるmutableArrayValueを作成するにはどうすればよいですか?
let personSelectedListItems = person.mutableSetValue(forKey: "listItems")
personSelectedListItems.addObjects(from: selectedListItems)
print("personSelectedListItems after addObjects contains \(personSelectedListItems)")
を使用して、指定されたPerson
にオブジェクトを追加しましたListItem
。私は、各Person
用に作成されたこれらのオブジェクトを持つようにしたいので
personSelectedListItems after addObjects contains Relationship 'listItems' on managed object (0x6080000d2050) <PersonMO: 0x6080000d2050> (entity: Person; id: 0xd000000000040002 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/Person/p1> ; data: {
age = Ky;
firstName = Uykyu;
image = <89504e47 0d0a1a0a 0000000d 49484452 000002cc 00000333 08020000 003d00d3 35000000 01735247 4200aece 1ce90000 001c>;
isVisited = 0;
lastName = Kuyuy;
listItems = (
"0xd000000005140000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p325>",
"0xd000000005680000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p346>",
"0xd0000000023c0000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p143>"
);
locationCity = Uyk;
locationState = You;
notes = "";
phoneNumber = "";
score = nil;
}) with objects {(
<ListItemMO: 0x6000000b6c20> (entity: ListItem; id: 0xd000000005140000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p325> ; data: {
category = Meta;
isSelected = 1;
listItem = "Similar values";
listItemStatus = 1;
listItemWeight = 1;
people = (
"0xd000000000040002 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/Person/p1>"
);
}),
<ListItemMO: 0x6000000af900> (entity: ListItem; id: 0xd000000000080000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p2> ; data: {
category = Appearance;
isSelected = 1;
listItem = Attractive;
listItemStatus = 3;
listItemWeight = 1;
people = (
"0xd000000000040002 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/Person/p1>"
);
}),
<ListItemMO: 0x6000000b27e0> (entity: ListItem; id: 0xd0000000023c0000 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/ListItem/p143> ; data: {
category = Behavior;
isSelected = 1;
listItem = "Good grammar";
listItemStatus = 1;
listItemWeight = 1;
people = (
"0xd000000000040002 <x-coredata://1350DE85-4F65-462A-9C36-1EEE3D5298CD/Person/p1>"
);
})
)}
これは、良いですが、それは私が一見アクセスすることはできませんよ順不同セットだから、それは悪いです:print文を提供します。私は、インデックスの各オブジェクトにアクセスできるように、それは可変配列であるために私がたいが、私は
let personSelectedListItems = person.mutableArrayValue(forKey: "listItems")
personSelectedListItems.addObjects(from: selectedListItems)
print("personSelectedListItems after addObjects contains \(personSelectedListItems)")
を行うとき、私は、このエラーメッセージが出ます:以来、
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSManagedObjects of entity 'Person' do not support -mutableArrayValueForKey: for the property 'listItems''
不可解されますmutableSetValueForKey:
がサポートされていたが、配列バージョンがサポートされていなかった理由はわかりません。理想的にはドット表記を使って、関係を通してオブジェクトにアクセスできるようにしたいと思っています。これについて最善の方法は何ですか?
モデルに順序付けされた関係を設定しましたか? – Wain
@Wain私は元々、そのセットを持っていなかった、チップのおかげで!私は 'ordered'ボックスをチェックして、関係を 'mutableOrderedSetValue'に変更しました。'(person.listItems?.object(at:0)) 'を実行すると、私に正しいオブジェクトが与えられました。私が執着しているのは、そのオブジェクトの属性にアクセスすることです。これをどうやって行うことができますか? – MachTurtle