2015-10-27 2 views
0

Итак, у меня есть Entity Users и Entity Хобби, я создал отношения для многих, в которых один пользователь может иметь много Увлечений. Я также создал обратную связь. Я также создал подклассы для этих объектов, но я не уверен, как сохранить объект Hobby в пользовательском объекте.Как сохранить объект в другом объекте данных ядра swift

Вот мои подклассы Пользователь:

import Foundation 
import CoreData 

class Users: NSManagedObject { 
// Insert code here to add functionality to your managed object subclass 

} 

import Foundation 
import CoreData 

extension Users { 

    @NSManaged var password: String? 
    @NSManaged var username: String? 
    @NSManaged var hobby: NSSet? 

} 

Вот мои хобби подклассы:

import Foundation 
import CoreData 

class Hobby: NSManagedObject { 

// Insert code here to add functionality to your managed object subclass 

} 

import Foundation 
import CoreData 

extension Hobby { 

    @NSManaged var name: String? 

} 

Я понял, как добавлять/обновлять/удалять элементы из основных данных, но просто не знаю, как для добавления целого объекта в другой. Любая помощь будет замечательной! Если я делаю что-то неправильно или думаю об этом неправильно, пожалуйста, исправьте меня.

ответ

0

Прежде всего вам нужно создать подклассы, как в этом примере, где отношение ко многим. Подкласс (Учитель/курс + CoreDataProperties.swift) выглядит следующим образом:

import Foundation 
import CoreData 

extension Teacher { 

@NSManaged var name: String? 
@NSManaged var lastname: String? 
@NSManaged var course: NSSet? 

} 

и это:

import Foundation 
import CoreData 

extension Course { 

@NSManaged var name: String? 
@NSManaged var teacher: Teacher? 

} 

После этого при создании объекта учителя или принести существующий, и вы создаете или извлечение объекта курса вы можете получить доступ к свойствам курса «учитель» и установить это так (предположим, что новый курс является математическим):

math.teacher = (here you add Teacher object that math course is related too) 
+0

Хорошо, поэтому я могу добавить весь объект Учителя к math.teacher? Мне не нужно беспокоиться о NSSet? – Suzukijak3

+0

Я использовал то, что вы предложили, но я не уверен, добавило ли оно хобби пользователю. Я не уверен, как печатать хобби у объекта User, где находится NSSet. Любые идеи о том, как пройти через это? – Suzukijak3

+0

Похоже, это сработало, другой парень помог мне распечатать данные, и ваша вставка работала. Поэтому мне просто нужно сохранить инверсию, чтобы она работала. – Suzukijak3

0

Во-первых, вы должны были оставить часть сгенерированного кода, потому что в классе Hobby должно быть обратное отношение, возвращающееся к пользователю (-ам). Я представляю, что Хобби -> Пользовательские отношения также ко многим, потому что я уверен, что у хобби «Наблюдение за птицами» будет более одного пользователя.

Если ваш код не включает эти отношения, то ваша модель, вероятно, фактически не включает обратную связь.

Кроме того, более распространено использование отношений множественных форм для многих, что означает, что вы можете захотеть переименовать свои отношения в «увлечения».

Все, что вам нужно сделать, это добавить экземпляр объекта «Хобби» к отношениям «хобби» для данного «пользователя». Не нужно менять оба отношения, потому что основные данные будут устанавливать обратные отношения.

Это полностью непроверенная попытка преобразования ObjC в быстрый, но он должен быть достаточно близок к джазу.

// Add 'hobby' to the set of hobbies for a given 'user' 
// The inverse relationship (add 'user' to the set of users for a given 'hobby' 
// will be automatically handled by core data 
user.mutableSetValueForKey("hobby").addObject(hobby) 

EDIT

Хорошо, так что я думаю, что нужно, чтобы получить текущего пользователя, чтобы добавить к нужному пользователю. I Я хочу что-то использовать этот код var curUser = NSEntityDescription.insertNewObjectForEntityForName («Пользователь», inManagedObjectContext: context) as! Пользователи curUser.hobby = addHobbyTextField.text as! NSSet, но не уверен, как обращаться с NSSet. Любая помощь по этому поводу? - Suzukijak3

Итак, похоже, что вы создаете нового пользователя ...

var curUser = NSEntityDescription.insertNewObjectForEntityForName(
    "User", 
    inManagedObjectContext: context) as! Users 

Вторая часть, однако, это немного сбивает с толку. Вы написали это ...

curUser.hobby = addHobbyTextField.text as! NSSet 

и я признаю знание ZERO о быстром, но это просто странно. Вы пытаетесь ввести строку (значение внутри текстового поля) в NSSet? Это никогда не будет работать, и это не имеет никакого смысла.

Я угадаю, что в этом текстовом поле есть имя хобби, может быть, что-то вроде «чтения», и, возможно, вы хотите добавить «чтение» в качестве хобби нового пользователя.

Если это так, то вам нужно получить объект хобби на основе имени хобби, а затем добавить это хобби в коллекцию хобби для данного пользователя.

Теперь я уйду от любого предлога на быстрый ответ и ответю в ObjC, потому что я предполагаю, что вы, как быстрый программист, можете переносить то, что я пишу здесь, в подходящее быстро, чем могу, и это, похоже, больше связано с тем, как для использования данных ядра, чем один из быстрых синтаксисов (также вы, вероятно, не хотите просто игнорировать возможную ошибку в выборке).

// Fetch the appropriate hobby object 
NSString *hobbyName = addHobbyTextField.text; 
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Hobby"]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name = %@", hobbyName]; 
fetchRequest.fetchLimit = 1; 
Hobby *hobby = [[moc executeFetchRequest:fetchRequest error:NULL] firstObject]; 

// Add the hobby to the set of hobbies for this user 
if (hobby) { 
    [[user mutableSetValueForKey:@"hobby"] addObject:hobby]; 
} 
+0

Хорошо, поэтому я думаю, мне нужно, чтобы текущий пользователь добавил к нужному пользователю. Я хочу использовать что-то в этом коде 'var curUser = NSEntityDescription.insertNewObjectForEntityForName (« Пользователь », inManagedObjectContext: context) как! Пользователи curUser.hobby = addHobbyTextField.text as! NSSet', но не уверен, как обращаться с NSSet. Любая помощь по этому поводу? – Suzukijak3

+0

Хорошо спасибо Джоди, я попробую это. Я могу сделать этот перевод, я думаю, посмотрю, сработает ли он. – Suzukijak3