Во-первых, вы должны были оставить часть сгенерированного кода, потому что в классе 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];
}
Хорошо, поэтому я могу добавить весь объект Учителя к math.teacher? Мне не нужно беспокоиться о NSSet? – Suzukijak3
Я использовал то, что вы предложили, но я не уверен, добавило ли оно хобби пользователю. Я не уверен, как печатать хобби у объекта User, где находится NSSet. Любые идеи о том, как пройти через это? – Suzukijak3
Похоже, это сработало, другой парень помог мне распечатать данные, и ваша вставка работала. Поэтому мне просто нужно сохранить инверсию, чтобы она работала. – Suzukijak3