Нуждаюсь в помощи с many-many отношениями в базовых данных для iPhone

Можно также установить точки останова на определенных исключениях. От Проекции отладки существует кнопка "Add Java Exception Breakpoint", и там можно добавить "NullPointerException". Ваш отладчик тогда приостановит выполнение, как только такое исключение повышено.

6
задан Peter Hosey 9 November 2009 в 01:20
поделиться

4 ответа

Хорошо, проработав над этим последние 2 дня, я, наконец, пришел к своему решению, которое на самом деле было смесью предложений Алекса и Уиллса ... Спасибо вам обоим !!

Вот что у меня есть ...

 NSManagedObjectContext *context = [restaurant managedObjectContext];


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:context]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
[fetchRequest setSortDescriptors:sortDescriptors];

NSError *error = nil;
NSArray *possibleCategories = [context executeFetchRequest:fetchRequest error:&error];

categoryArray = [[NSMutableArray alloc] initWithArray:possibleCategories];

currentCategories = [restaurant valueForKeyPath:@"categories"];

[restaurant addCategoriesObject:(Category *)[possibleCategories objectAtIndex:15 ]];

[currentCategories addObject:(Category*)[categoryArray objectAtIndex:15]];

а потом я сохраняю вот так

- (void)save{
    NSLog(@"EditCatagoriesTableViewController - save");

    NSSet* myCategorySet = [[NSSet alloc] initWithSet:currentCategories];

    NSError *error = nil;

    [restaurant addCategories:myCategorySet];


    error = nil;
    if (![restaurant.managedObjectContext save:&error]) {
        // Handle error
        NSLog(@"restaurant - Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }       
}

И все готово!

Большое вам спасибо за помощь вам двоим !!!

-Курт

5
ответ дан 8 December 2019 в 18:39
поделиться

Вместо этого вы могли бы сделать что-то вроде этого:

Restaurant *mcDonalds = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext];
mcDonalds.name = @"McDonalds";

Restaurant *inNOut = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext];
inNOut.name = @"In-N-Out";

Category *driveThru = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
driveThru.name = @"Drive Thru to Go";

Category *sitDown = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext];
sitDown.name = @"Sit Down and Eat";

// make NSSet* of Category objects
NSSet *fastFood = [NSSet setWithObjects:driveThru, sitDown, nil];

// set Restaurant instances' categories ("to-many") property
mcDonalds.categories = fastFood;
inNOut.categories = fastFood;

// save changes to managedObjectContext...
NSError *error = nil;
if ([managedObjectContext save:&error]) {
   // handle save error
}

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

Честно говоря, я бы рекомендовал отложить ваш проект в сторону и изучить Core Data Tutorial for iPhone .

]
4
ответ дан 8 December 2019 в 18:39
поделиться

Как мне установить разные значения для категории "Рестораны"? а затем как получить их обратно?

Лучше всего просмотреть Core Data Tutorial для iPhone , в котором рассказывается, как добавить новые экземпляры управляемых объектов типа Entity (в вашем case, «Restaurant»), установите атрибуты этого экземпляра (например, «Restaurant.category») и получите результаты.

В учебнике используется тип сущности под названием «Событие», который имеет атрибуты даты и местоположения, но идеи все те же.

0
ответ дан 8 December 2019 в 18:39
поделиться

Как инженер по обеспечению качества по профессии, я бы сказал, что было бы хорошо иметь выделенного QA, как только вы сможете это сделать. Во время начального цикла разработки QA привнесет другую перспективу в планирование функций - насколько быстро это должно выполняться? Насколько велик масштаб? Сколько пользователей может поддерживать одна установка одновременно?

Хороший инженер по обеспечению качества постоянно находит новые способы что-то сломать. Сосредоточиться на этом с самого начала всегда лучше, чем привлекать QA позже в процессе, деморализуя разработчиков, которые думали, что у них все хорошо, до тех пор, пока новые специалисты по QA не свалиют на них сотни отчетов об ошибках, которые затем необходимо отсортировать (это это даже ошибка? Если бы QA был задействован с самого начала, они бы знали, что это предполагаемое поведение! и т. д.), а затем фактически исправили.

И, давайте будем честными здесь ... если мы ' Говоря о стартапе, они не собираются писать планы тестирования или производить полезную автоматизацию. Планы тестирования прекрасны, если у вас есть стабильный продукт и вы уверены, что весь пользовательский интерфейс не изменится, а автоматизация отлично подходит для выявления регресса, но на начальном этапе разработки не будет никаких регрессов, потому что вы еще не выпустили ничего, от чего можно было бы отступить.

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

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

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

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

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

t быть любыми регрессами, потому что вы еще не отправили ничего, из чего можно было бы отступить.

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

t быть любыми регрессами, потому что вы еще не поставили ничего, от чего можно было бы отступить.

На самом деле, важные навыки, которые нужны хорошему QA-инженеру, - это коммуникация, упрямство и способность быстро набирать обороты. Если QA находит ошибку, но не может четко и кратко объяснить, как она произошла, что они делали и как ее воспроизвести, их полезность быстро снижается.

restaurant.categories = [NSSet setWithObjects:category1, category2, nil];
4
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: