Редактирование основных данных реляционных данных - PullRequest
3 голосов
/ 15 января 2010

В моей модели данных есть сущности «Пользователь» и «Друзья», которые являются отношениями «один пользователь ко многим друзьям».

Мой ViewController создается с переменной экземпляра для пользователя (* user), и поэтому я могу получить доступвсе друзья, загружая user.friends как друзей, определяются как NSSet в моем объекте User.

В моем коде я загружаю всех друзей в NSMutableArray, делаю некоторые вещи и, возможно, перед уходом хочу добавить дополнительных друзейи редактировать атрибуты существующих друзей.Я в растерянности, как я могу добавлять / редактировать друзей.

Должен ли я редактировать NSMutableArray объектов друзей и сохранить его обратно в User.context?Если так, то как?

Если редактировать друга, следует ли мне скопировать существующий объект друга, изменить значения, удалить старый объект из массива и добавить новый (скопированный и обновленный)?

Надеюсь, это имеет смысл...

Ответы [ 2 ]

1 голос
/ 15 января 2010

Вы можете изменять объекты Friend (не нужно создавать новые копии и удалять старые).

Попробуйте это:

// create a mutable copy of an array from the set of the user's friends
NSMutableArray *friends = [[user.friends allObjects] mutableCopy];

// modify friends array or any Friend objects in the array as desired

// create a new set from the array and store it as the user's new friends
user.friends = [NSSet setWithArray:friends];
[friends release];

// save any changes
NSManagedObjectContext *moc = [user managedObjectContext];
if ([moc hasChanges] && ![moc save:&error]) {
    // handle error
}

Вы также можете использовать изменяемый набор вместо массива:

// create a mutable copy of the set of the user's friends
NSMutableSet *friends = [user.friends mutableCopy];

// modify friends set or any Friend objects in the set as desired

// create a new set from the set and store it as the user's new friends
user.friends = [NSSet setWithSet:friends];
[friends release];

// save any changes
NSManagedObjectContext *moc = [user managedObjectContext];
if ([moc hasChanges] && ![moc save:&error]) {
    // handle error
}
0 голосов
/ 15 января 2010

Если у вас есть указатель / ссылка на NSManagedObject, вы можете редактировать все атрибуты. Скажем, у вас есть один такой друг:

Friend *aFriend = [user.friends anyObject];
[aFriend setLastName:@"new Lastname"];
NSError *error = nil;
[[self managedObjectContext] save:&error];

Чтобы добавить друга, сделайте это:

Friend *aNewFriend = [NSEntityDescription insertNewObjectForEntityForName:@"friend" inManagedObjectContext:[self managedObjectContext]];
[user addFriendsObject:aNewFriend];
NSError *error = nil;
[[self managedObjectContext] save:&error];

Однако это не добавит нового друга в NSMutableArray, который вы создали из user.friends, установленного ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...