2016-05-13 12 views
0

私は、コアデータの多対多関係の関係値を取得しようとしています。 私は2つのエンティティPersonとAddressが必要です。 Personは複数のアドレスを持つことができ、名前には&の2つの属性があります。アドレスにはCityという属性が1つしかありません。ここでIOS Swiftのコアデータの多対多関係を取得する方法は?

は、私は値

let managedContext = (UIApplication.sharedApplication().delegate as? AppDelegate)!.managedObjectContext 

let entity = NSEntityDescription.entityForName("Person", inManagedObjectContext: managedContext) 
let addEntity = NSEntityDescription.entityForName("Address", inManagedObjectContext: managedContext) 

let person = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext) 

let address = NSManagedObject(entity: addEntity!, insertIntoManagedObjectContext: managedContext) 

person.setValue(name, forKey: "name") 
person.setValue(age, forKey: "age") 
address.setValue(city, forKey: "city") 

person.setValue(NSSet(object: address), forKey: "addresses") 

do { 
    try person.managedObjectContext?.save() 
    people.append(person) 
} catch let error as NSError { 
    print("Could not save \(error)") 
} 

を設定しようとしている。これは私のコアデータプロパティは、私がしようとしているテーブルビューにデータをフェッチするためにその後

extension Person { 

    @NSManaged var age: NSNumber? 
    @NSManaged var name: String? 
    @NSManaged var addresses: Address? 

} 

extension Address { 

    @NSManaged var city: String? 
    @NSManaged var persons: Person? 

} 

に設定されている方法である方法です以下のような何かをする印刷のこの

let person = people[indexPath.row] 
let address = person.mutableSetValueForKey("addresses") 
print(address.allObjects.first as! Address) 

値は次のようなものである

<Address: 0x7f9481f1e290> (entity: Address; id: 0xd000000000040002 <x-coredata://7A4230B9-0EF0-44D5-BBDD-D8E9A3E38F59/Address/p1> ; data: <fault>) 

任意の助けいただければ幸いです。前もって感謝します。

+0

あなたのモデルで逆の関係を作成する方がはるかに簡単です。したがって、アドレスから逆の人への逆です。それから、単純に 'address.person = person'を設定します。Core Dataはあなたのための前方関係を世話します – Paulw11

+0

@ Paulw11私はすでにデータモデルで逆の関係を設定しています。私の質問はNSSetから文字列を取得する方法ですか? –

+0

'let someAddress = address.allObjects.first' - すでにこのコードがあります。それで、単純に 'print(someAddress.city)'のようなもの – Paulw11

答えて

0

これは関係(属性ではない)を確認します。そしてto-manyです。このように:その後 enter image description here 、それはこのようになります。

extension Album { 

    @NSManaged var createDate: NSDate? 
    @NSManaged var isDefault: NSNumber? 
    @NSManaged var name: String? 
    @NSManaged var order: NSNumber? 
    @NSManaged var picture: NSData? 
    @NSManaged var notes: NSOrderedSet? // Attention: NSOrderedSet 

} 
+0

コアデータモデルを再生成しました。これが@NSManaged var addresses:NSSetに設定されています。 –

+0

@AshutoshJhaそして共通の属性と同様に、アドレスを設定して保存します。 – Lumialxk

+0

@AshutoshJhaアドレスを保存したときに、 'person.addresses'でアクセスしてください – Lumialxk

0

をあなたが表示されているモデルでは、あなたはそれがあることを述べるものではありません。あなたのモデルは、1:1の間違った名前の関係を示しています。あなたのコードに基づいて、クラッシュすることを賭けるべきです。

@NSManaged var addresses: Address? // is not a 1:N 

データモデルを確認してコードを再生成することをお勧めします。

関連する問題