Документация уровня для обоих проектов ужасна.
Однако, так как SproutCore теперь поддерживается Apple, и Apple довольно хороша в обеспечении хорошей документации, я ожидаю, что это изменится.
Cap, однако имеет выпущенное приложение (280Slides) реального мира, с которым у Вас может быть игра понять то, как Вы должны структурировать свое приложение. Таким образом в этой точке его, вероятно, легче начать с Cap тем более, что Вы знаете цель-c.
знать, что для обоих проектов, количество средств управления out-of-the-box очень ограничено, таким образом, Вы реализуете свое собственное. Кроме того, SproutCore ужасен по умолчанию!
Лично, я думаю, что подход Cap превосходен.
Вы не должны писать HTML или CSS. Действительно такое чувство записи настольного приложения и путем кодирования в цели-js, Вы по существу абстрагированы от браузера.
Однако я не поклонник самого языка. Я предпочел бы его, если бы они придерживались pov JavaScript.
я понимаю, что разработчикам Mac понравится потенциальная мобильность кода, который Вы создаете с Cap однако, так как Apple обанкротилась в 2012, я действительно не вижу точку:)
Правило каскада автоматически удаляет объекты в месте назначения. Итак, если вы удалите отдел, сотрудники будут удалены независимо от количества отделов, в которых они находятся.
Похоже, поведение, которое вы хотите, немного более тонкое, чтобы удалить только «осиротевших» сотрудников - т.е. те, у которых нет отдела. Когда вы удаляете отдел, хороший способ найти его - это сделать что-то вроде этого:
NSManagedObject *doomedDepartment = // get the department to be deleted
NSSet *employees = [doomedDepartment valueForKey:@"employees"];
NSSet *orphanedEmployees = [employees filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"departments.@count == 1"]];
for (NSManagedObject *orphanedEmployee in orphanedEmployees) {
[managedObjectContext deleteObject:orphanedEmployee];
}
[managedObjectContext deleteObject:doomedDepartment];
Спасибо, Алекс. Я, наверное, так и сделаю. Тем временем я нашел другой способ сделать это:
1.) Зарегистрироваться для получения уведомлений об изменениях:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(managedObjectContextDidChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:managedObjectContext];
2.) Когда происходят изменения и обновляется сотрудник. Я проверяю, имеет ли этот объект 0 отношений с отделами, и удаляю его:
- (void)managedObjectContextDidChange:(NSNotification *)notification {
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];
for(NSManagedObject *obj in updatedObjects){
// walk through updated objects -> check for employees
// check if they still contain departments and if not delete them
if([obj.entity.name isEqualToString:@"Employee"]){
NSLog(@"Employee changed!");
if([[(Employee*)obj Departments] count]==0){
NSLog(@"No more relations -> Delete Employee");
[managedObjectContext deleteObject:obj];
}
}
}}
Это тоже хорошо работает, но может усложниться, если у вас есть несколько разных сущностей, для которых можно наблюдать такое поведение.