Я пытаюсь освоить основные данные и столкнулся со странной проблемой.У меня есть приложение, которое использует локальное уведомление для предупреждения пользователя, после чего пользователь входит в мое приложение, и этот метод называется:
- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif {
Когда приложение загружается, я запрашиваю другое представление предупреждения, чтобы получить некоторую информацию отпользователь:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@" Did you %@?", notif.alertBody] message:@""
delegate:self cancelButtonTitle:@"No..." otherButtonTitles:@"Yes!", nil];
[alert show];
И затем каждый раз, когда отображается это предупреждение, я хочу увеличить значение счетчика в моей базе данных базовых данных, и я делаю это, вызывая этот метод сразу после отображения предупреждения:
[self incrementVal];
Внутри этого метода я читаю значение, превращаю его в целое число, а затем передаю новое число другому методу, который затем сохраняет новое значение в моей базе данных.
-(void) incrementVal{
//for reading from the db
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"score" inManagedObjectContext:managedObjectContext_];
[fetchRequest setEntity:entity];
NSError *error;
NSPredicate * pred = [NSPredicate predicateWithFormat:@"id == 2"];
[fetchRequest setPredicate:pred];
NSArray * strengthVal = [managedObjectContext_ executeFetchRequest:fetchRequest error:&error];
armorScore * armo = [strengthVal objectAtIndex:0];
int aScor = [armo.score intValue];
aScor++;
//For updating the db
[self updateDBVal:aScor];
[fetchRequest release];
}
-(void) updateDBVal:(int)value{
NSFetchRequest *fetchRequest2 = [[NSFetchRequest alloc] init];
NSEntityDescription *entity2 = [NSEntityDescription
entityForName:@"score" inManagedObjectContext:managedObjectContext_];
[fetchRequest2 setEntity:entity2];
NSError *error2;
NSPredicate * pred2 = [NSPredicate predicateWithFormat:@"id == 2"];
[fetchRequest2 setPredicate:pred2];
NSArray * banna = [managedObjectContext_ executeFetchRequest:fetchRequest2 error:&error2];
armorScore * bann2 = [banna objectAtIndex:0];
bann2.score = [NSString stringWithFormat:@"%d", value];
[managedObjectContext_ save:&error2];
[error2 release];
[fetchRequest2 release];
}
Так что я не знаю, является ли этот подход идеальным, но это тот, который я придумал.Он работает нормально, когда я отлаживаю его и просматриваю каждую строку, но когда я просто запускаю его, он вылетает с сообщением Exc_Bad_Access ...
Что я делаю не так?Я действительно хочу выяснить это.
Спасибо !!