Основные данные iPhone - проблемы с NSNumber и obj_exception_throw - PullRequest
0 голосов
/ 29 января 2011

О, я действительно в этом рассол. Может быть, ваши свежие глаза могут творить чудеса ..

Мое приложение падает, когда попадает на эту строку в viewDidLoad.

NSString *fieldName = [NSString stringWithFormat:@"position%d", [objectPosition intValue]];

Я думаю, что это может быть из-за этой строки, которая находится над ней:

    NSNumber *objectPosition  = [[object position] integerValue];

Нет явной ошибки в строке fieldName.

Общие предупреждения включают в себя:

  • Инициализация делает указатель из целого числа без приведения

  • «NSManagedObject» может не отвечать на «-позицию»

  • obj_exception_throw

Я проверил класс на [положение объекта], и он говорит, что на самом деле это NSCFNumber. Я делаю что-то не так с NSNumber? Куда я иду не так?

Спасибо

Evolve

Весь метод указан здесь, здесь также есть ссылка на весь файл https://gist.github.com/801879

- (void)viewDidLoad {
  // Format page
  scrollView.contentSize = CGSizeMake(200, 430);

  // Initialise PositionsView array
  positionViews = [[NSArray alloc] initWithObjects:position1,position2,position3,position4,position5,position6,position7,position8,position9,position10,position11,position12,position13,position14,position15,position16,position17,position18,nil];

  // Load managedObject
  //Fetch All players from PlayerPosition where game matches this game and store in objects
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"PlayerPosition" inManagedObjectContext:managedObjectContext_];  
  [request setEntity:entityDescription];  
  NSPredicate *pred = [NSPredicate predicateWithFormat:@"(game = %@)", self.game];   //WHERE game = self.game
  [request setPredicate:pred];
  NSError *error;
  objects = [managedObjectContext_ executeFetchRequest:request error:&error]; //execute fetch and store in objects


  NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>    Populate View with data from the managedObject..    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

  for (NSManagedObject *object in objects) {
    //loop through the objects in PlayerPosition for this game and update UI elements.
    Player   *objectPlayer    = [object valueForKey:@"player"];

    NSNumber *objectPosition  = [[object position] integerValue];
    NSLog(@"Object: %@", [object valueForKey:@"position"]);
    NSString *fieldName = [NSString stringWithFormat:@"position%d", [objectPosition intValue]];
    PlayerPositionView *theField = [self valueForKey:fieldName];
    [[theField textLabel] setText:objectPlayer.playerShortName];
    NSLog(@"object Position: %@", [objectPosition description]);

  }
  NSLog(@">>>>>>>>>>>>>>>>>>>>>>>>>>    ..view Data Loaded    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

  [super viewDidLoad];
}

1 Ответ

0 голосов
/ 29 января 2011

[[object position] integerValue] вернет NSInteger, а не NSNumber *. Поскольку возвращаемое значение не является объектом, вы не можете (и не должны) отправлять ему сообщение -intValue. Просто используйте значение NSInteger непосредственно в +stringWithFormat:.

...