2014-09-17 8 views
10

डेटा फ़ेच मैं थोड़ा तेजतेज कोर संबंध

व्यक्ति इकाई में CoreData से संबंध डेटा लाने की कोशिश करते हैं भ्रमित व्यक्ति और अनन्य Id का नाम शामिल है हूँ। पुस्तकें के साथ संबंध

Person Entity: 
idPerson = 25 - namePerson = John 
idPerson = 26 - namePerson = Steve 

पुस्तकें इकाई पुस्तकों के शीर्षक होता है उदाहरण के लिए करने के लिए कई

एक है, किताब और व्यक्ति (personBook) के साथ एक संबंध आईडी की अनन्य आईडी। व्यक्ति के साथ संबंध एक उदाहरण के लिए करने के लिए एक है

Books Entity: 
idBook = 2543 - titleBook = title one - personBook = 25 
idBook = 2544 - titleBook = title two - personBook = 25 
idBook = 2545 - titleBook = title three - personBook = 26 
यहाँ

अपने डेटा मॉडल स्क्रीनशॉट: (कोई छवि क्योंकि मैं कोई प्रतिष्ठा है)

व्यक्ति वर्ग

 @objc(Person) 
     class Person: NSManagedObject { 
       @NSManaged var idPerson: String 
       @NSManaged var namePerson: String 
       @NSManaged var booksRel: NSSet 

     } 

पुस्तकें वर्ग

 @objc(Books) 
     class Books: NSManagedObject { 
       @NSManaged var bookTitle: String 
       @NSManaged var idBook: String 
       @NSManaged var personBook: String 
       @NSManaged var personRel: Person 

     } 

कोड प्राप्त करें

let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context:NSManagedObjectContext = appDel.managedObjectContext! 

    let request = NSFetchRequest(entityName: "Books") 
    request.returnsObjectsAsFaults = false 

    request.fetchLimit = 30 

    //////////////////////////// 
    // CODE TO JOIN Person entity WHERE personBook = idPerson 
    //////////////////////////// 

    var results:NSArray = context.executeFetchRequest(request, error: nil)! 

    for temp in results { 
     var data = temp as Books 
     /////////////////////////////////////// 
     //println(data.namePerson) ----> not working 
     /////////////////////////////////////// 
    } 

प्रत्येक पुस्तक के लिए संबंधित नाम पर्सन नाम पर रखने के लिए possibile हैPerson = personBook?

बहुत बहुत धन्यवाद!

उत्तर

8

आपको Books इकाई के लिए personBook संपत्ति की आवश्यकता नहीं है। ,

let book = NSEntityDescription.insertNewObjectForEntityForName("Books", inManagedObjectContext: context) as Books 
book.bookTitle = "My book Title" 
book.idBook = 2547 
book.personRel = person 

var error: NSError? 
if !context.save(&error) { 
    println("Unresolved error \(error), \(error!.userInfo)") 
    abort() 
} 

अब जब आप एक पर लाने बनाना चाहते:

के एक Person managedObject बनाएँ: जब आप एक Books managedObject बनाने

let person = NSEntityDescription.insertNewObjectForEntityForName("Person", inManagedObjectContext: context) as Person 
person.idPerson = 23 
person.namePerson = "John" 

var error: NSError? 
if !context.save(&error) { 
    println("Unresolved error \(error), \(error!.userInfo)") 
    abort() 
} 

, तो आप इस तरह person लिंक कर सकते हैं Books, आप यह कर सकते हैं:

let fetchRequest = NSFetchRequest(entityName: "Books") 
var error: NSError? 
var booksArray = context.executeFetchRequest(fetchRequest, error:&error) 
if let error = error { 
    println("Unresolved error \(error), \(error.userInfo)") 
    abort() 
} 

for book in booksArray as [Books] { 
    let person = book.personRel as Person 

    println(person.namePerson) 
    println(person.idPerson) 
} 
+0

धन्यवाद @POB, लेकिन CoreData एक json से बचाया जाता है और फिर आवेदन के द्वारा लाया गया। उदाहरण के लिए आज आप केवल 1 नए व्यक्ति और 50 किताबें प्राप्त करते हैं। –

+0

मुझे यह नहीं मिला। क्या पूछते हैं? क्या यह आपके fetchRequest से संबंधित है? –

+0

मैं बेहतर व्याख्या करने की कोशिश करता हूं। ऐप में जेसन से अलग-अलग समय में दो इकाई अपडेट हैं। मेरा मुख्य सवाल है .... जब मैं पुस्तक दृश्य में किसी तालिका दृश्य में या संग्रह दृश्य में प्राप्त करता हूं, तो मैं idPerson = personBook के लिए पुस्तक इकाई को संबंधित टाइटलाइन और संबंधित नाम Person को पुनः प्राप्त करने के लिए व्यक्ति इकाई के साथ पुस्तकें एंटाइटेल में शामिल हो सकता हूं। धन्यवाद!!!! –

1

मैं सही ढंग से अपने प्रश्न/डेटा संरचना को समझ लिया है, तो आप की तरह कुछ करना चाहता हूँ होगा:

let fetchRequest = NSFetchRequest(entityName: "Books") 
let bookPersonPredicate = NSPredicate(format: "personRel.idPerson == %@", person.idPerson) 
fetchRequest.predicate = bookPersonPredicate