我有一个名为Interaction的类,或多或少地管理NSManagedObject,并保持整个应用程序的状态。当试图通过核心数据循环访问不良有很多
// In IntroViewController
AppDelegate *applicationDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
applicationDelegate.interaction = [[Interaction alloc] init];
[applicationDelegate.interaction createNewInteractionByCallId:[NSNumber numberWithInt:1] programId:[NSNumber numberWithInt:2] questionnaireId:[NSNumber numberWithInt:3] outletId:[NSNumber numberWithInt:4] userId:[NSNumber numberWithInt:5]];
于是就有我设置了互动的一个实例,并使用create方法我已经在那里建立了管理对象:
- (void)createNewInteractionByCallId:(NSNumber *)callId programId:(NSNumber *)programId questionnaireId:(NSNumber *)questionnaireId outletId:(NSNumber *)outletId userId:(NSNumber *)userId
{
NSManagedObjectContext *context = [self getManagedContext];
NSManagedObject *interaction = [NSEntityDescription insertNewObjectForEntityForName:@"Interaction" inManagedObjectContext:context];
[interaction setValue:[NSDate date] forKey:@"date_started"];
[interaction setValue:[self createGUUID] forKey:@"uuid"];
[interaction setValue:callId forKey:@"call_id"];
[interaction setValue:programId forKey:@"program_id"];
[interaction setValue:questionnaireId forKey:@"questionnaire_id"];
[interaction setValue:userId forKey:@"user_id"];
[interaction setValue:outletId forKey:@"outlet_id"];
[self saveRecord];
self.managedObject = interaction;
}
为了描述的实体。交互有很多答案。答案与我们的远程服务器上的问题ID相关。
所以当我添加一个答案时,我会检查给定questionId的答案并更新它,或者创建一个新答案。这就是事情都吹了起来:从Interaction.m
- (NSMutableSet *)getAnswers
{
[self.managedObject mutableSetValueForKey:@"answers"];
}
但是我得到的坏访问错误的for循环线
- (void)addAnswerFor:(NSNumber *)questionId questionType:(NSNumber *)questionType formId:(NSNumber *)formId answerText:(NSString *)answerText
{
NSManagedObject *answer;
NSMutableSet *answers = [self getAnswers];
NSArray *answersArray = [answers allObjects];
for (NSManagedObject *ans in answersArray) {
if ([ans valueForKey:@"question_id"] == questionId) {
answer = ans;
}
}
// ...
}
//找到答案:
EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
我是否需要初始化关系的空集?
我很欣赏这个输入。请注意,NSSet似乎没有firstObject propery :)。结束使用anyObject,但正如你所说,如果交互对给定的question_id有多个问题,可能会导致意外的行为。我用错误代码更新了我的问题,并将其放入getAnswers方法中。关于为什么可能返回零的任何想法?我同意交互类本身需要一些改进,但是如果我将逻辑保存到视图控制器中,是不是会导致整个应用程序有很多重复代码? – agmcleod
我刚刚意识到了核心问题。我没有在getAnswers中调用return语句... do'h。我把它留在问题中作为参考。 – agmcleod
感谢您的提示。我将其更正为“anyObject”。 – Mundi