2016-02-24 3 views
0

Я работаю над приложением iPhone, где мне нужно реализовать одно отношение к одному из объектов от одного объекта к другому. У меня есть экспорт подкласса NSManagedObject из базы данных coredata, но не удалось найти атрибуты доступа в файле данных основных данных, например Objective-C.Основные данные Отношения в swift

Хотя я могу установить данные в отношениях NSSet, но это только сохраняется, пока приложение iPhone работает. После того как я убил и перезапустил приложение, я не получил отношения сущности для запроса на выборку из основных данных.

Я не уверен, что я делаю неправильно. Будет здорово, если кто-нибудь скажет мне, как установить данные в объекте отношений NSSet. Любой пример примера будет отличной помощью

Вот мои основные файлы модели данных. Одна папка может удовлетворяться несколько содержание в деталях папки

extension FolderContent { 

    @NSManaged var contentID: NSNumber? 
    @NSManaged var contentTitle: String? 
    @NSManaged var contentType: String? 
    @NSManaged var publishDate: String? 
    @NSManaged var folderList: NSSet? 

} 

extension FolderList { 

    @NSManaged var folderID: NSNumber? 
    @NSManaged var folderName: String? 
    @NSManaged var folderDetail: NSSet? 

} 

func updateFolderList() 
{ 
    // Initialize Fetch Request 
    let fetchRequest = NSFetchRequest() 

    // Create Entity Description 
    let entityDescription = NSEntityDescription.entityForName(FOLDER_LIST, inManagedObjectContext: self.managedObjectContext) 

    // Configure Fetch Request 
    fetchRequest.entity = entityDescription 

    do { 
     let result = try self.managedObjectContext.executeFetchRequest(fetchRequest).last as! FolderList 

     let content = result.mutableSetValueForKey("folderDetail") 
     content.addObject(self.getContent()) 

      var folderContent:FolderContent = result.folderDetail?.allObjects.first as! FolderContent 
     print(folderContent.contentTitle) 
     self.save() 

     print(result) 

    } catch { 
     let fetchError = error as NSError 
     print(fetchError) 
    } 

} 
    func getContent()->FolderContent 
{ 
    let folderContent = NSEntityDescription.insertNewObjectForEntityForName(FOLDER_CONTENT, inManagedObjectContext: self.managedObjectContext) as! FolderContent 
    folderContent.contentID = 1 
    folderContent.contentTitle = "Sandeep" 
    folderContent.contentType = "Product" 
    return folderContent 
} 
+0

Возможно, вы имели в виду, что вы не сумели принести только записи отношений или ole записей, которые вы сохраняли в базе данных? – DavidODW

+0

Мне не удалось получить только записи отношений. –

+0

В этом случае возникает проблема, когда вы сохраняете записи в основных данных. Пожалуйста, обратитесь к разделу [Сохранение связей CoreData to-many в Swift] (http://stackoverflow.com/questions/25127090/saving-coredata-to-many-relationships-in-swift). Может быть, вы получите ответы оттуда. – DavidODW

ответ

2

Если отношение FolderContent и FolderList определяется как

  • A FolderContent имеют много FolderList (ов)
  • FolderList принадлежит только к FolderContent

FolderContent

enter image description here

extension FolderContent { 
    @NSManaged var contentID: NSNumber? 
    @NSManaged var contentTitle: String? 
    @NSManaged var contentType: String? 
    @NSManaged var publishDate: String? 
    @NSManaged var folderList: Set<FolderList>? 
} 

FolderList

enter image description here

extension FolderList { 
    @NSManaged var folderID: NSNumber? 
    @NSManaged var folderName: String? 
    @NSManaged var folderDetail: FolderContent? 
} 

Пусть говорят, что вы хотите, чтобы сохраняться запись и ее отношения

func persistRecords() { 

    // Insert the new records 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedContext = appDelegate.managedObjectContext 

    let folderContentEntity = NSEntityDescription.entityForName("FolderContent", inManagedObjectContext: managedContext) 
    let folderListEntity = NSEntityDescription.entityForName("FolderList", inManagedObjectContext: managedContext) 

    //Create FolderContent record 
    let folderContentObject = FolderContent(entity: folderContentEntity!, insertIntoManagedObjectContext: managedContext) 
    folderContentObject.setValue(CONTENTID, forKeyPath: "contentID") 
    ... 

    //Create FolderList record 
    let folderListObject = FolderList(entity: folderListEntity!, insertIntoManagedObjectContext: managedContext) 
    folderListObject.setValue(FOLDERID, forKeyPath: "folderID") 
    ... 

    //Set relationship here 
    folderListObject.folderDetail = folderContentObject 

    do { 
     try managedContext.save() 
    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 
    } 
+0

Спасибо Дэвиду за подробные подробности. Можете ли вы показать мне, как обновлять и удалять объекты отношений? –

+0

Вы можете узнать, как обновлять и удалять методы здесь. Https://www.andrewcbancroft.com/2015/02/18/core-data-cheat-sheet-for-swift-ios-developers/ – DavidODW

0

Я предполагаю, что вы сделали что-то вроде folder.folderDetail.addObject. С основными данными, которые не будут работать, потому что основные данные за кулисами делают много вещей для поддержания целостности графика. Вы должны использовать mutableSetValueForKey, чтобы получить комплект и иметь основные данные, работающие с его магией.

+0

У меня есть обновленный мой вопрос. Вы можете проверить, как я устанавливаю данные в отношении. Один вопрос заключается в том, как result.mutableSetValueForKey («folderDetail») работает, как основные данные знают «folderDetail» как изменяемый ключ? это то, что нам нужно определить где-то? –

+0

Вы должны определить свои сущности и отношения в редакторе модели основных данных.Иначе это никогда не сработает. Я думаю, вам нужно сделать шаг назад и с самого начала прочитать некоторые учебные пособия по созданию основного приложения на основе данных. Определение folderDetail в модели будет одной из первых вещей, которые вы делаете. – user965972

Смежные вопросы