Судя по количеству смежных вопросов, которые были подняты, это выглядит как часто задаваемый вопрос, который делает меня все более нерешительным задавать его. Я рассмотрел большинство этих вопросов, но ни один из них, похоже, не решает конкретную проблему, с которой мне трудно разобраться.
Небольшая справочная информация о том, чего я пытаюсь достичь, как я это делаю и какая у меня проблема:
Я пытаюсь проанализировать веб-службу XML, загрузить эти данные в NSMutableArray (или в любое другое место, откуда я могу получить к нему доступ позже), а затем взять мои данные и загрузить их в мою модель базовых данных. Первая часть этого я могу сделать, когда у меня есть информация в массиве, и я пытаюсь загрузить ее в базовые данные, которые, похоже, не могут прогрессировать.
Моя модель (упрощенная для этого вопроса) состоит из объекта маршрута, который имеет отношение один ко многим с объектом контрольной точки. Данные, которые я буду пытаться загрузить, представляют собой разнообразную информацию об атрибутах в моем объекте маршрута, который не включен в мой массив, а затем в мой список контрольных точек, которым является этот массив. Моя проблема в том, что я не могу надежно добавить весь свой массив контрольных точек и затем сохранить. Для статического случая, который я использую для разработки, у меня есть 20 проверенных контрольных точек, которые были проанализированы в моем NSMutableArray, из них самое большее, что я смог перенести в свой NSMutableSet, то есть часть контрольных точек моего объекта маршрута, - это 7 до сбоя с любой из них. SIGABRT, или EXC_BAD ACCESS, или неверный селектор отправлен. Я пытался выяснить это для большей части сегодняшнего дня без удачи. Теперь немного кода:
NSManagedObjectContext *context = [appDelegate managedObjectContext];
//newRoute is the route that I am trying to create and then store persistently
newRoute = [NSEntityDescription insertNewObjectForEntityForName:@"Route" inManagedObjectContext:context];
//filling in some available attribute information
if (name.text == @"")
[newRoute setValue:[NSDate date] forKey:@"name"];
else
[newRoute setValue:name.text forKey:@"name"];
NSMutableSet *muteSet = [newRoute mutableSetValueForKey:@"myCheckpoints"];
for (int i = 0; i < [appDelegate.checkpoints count]; i++ )
{
Checkpoint *newCheckpoint = [[Checkpoint alloc] init];
[newCheckpoint setName:[[appDelegate.checkpoints objectAtIndex:i] valueForKey:@"name"]];
NSLog(@"Appending %@ to set", newCheckpoint.name);
[muteSet addObject:newCheckpoint];
[newCheckpoint release];
}
//myCheckpoints is the route<-->>checkpoints relationship
[newRoute setValue:muteSet forKey:@"myCheckpoints"];
// Save the context.
NSError *error = nil;
if (![context save:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
Из любопытства, почему не работает следующее?
NSSet *ckPtSet = [[NSSet alloc] initWithArray:appDelegate.checkpoints];
[newRoute setValue:ckPtSet forKey:@"myCheckpoints"];
Насколько я понимаю, и это может быть там, где проблема ... при установке значения myCheckpoints, ожидание должно быть передано NSSet. При работе с отладчиком инициализированный набор на самом деле содержит 20 объектов, но когда я пытаюсь пройти мимо, я снова получаю неверный селектор, получивший ошибку.
В любом случае, спасибо, что нашли время, чтобы прочитать мою стену текста, если вам нужна дополнительная помощь, пожалуйста, дайте мне знать, и я добавлю это как можно скорее!
-Karoly