Я пытаюсь прочитать, а затем обновить значение с помощью Core Data, но когда я запускаю его, я получаю «EXC_BAD_ACCESS», но когда я отлаживаю его, оно работает - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь освоить основные данные и столкнулся со странной проблемой.У меня есть приложение, которое использует локальное уведомление для предупреждения пользователя, после чего пользователь входит в мое приложение, и этот метод называется:

- (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 ...

Что я делаю не так?Я действительно хочу выяснить это.

Спасибо !!

1 Ответ

1 голос
/ 22 февраля 2011

Это то, что вы делаете неправильно:

[error2 release];
...