Добавить объект в NSMutableArray из другого представления

#iphone #nsmutablearray

#iPhone #nsmutablearray

Вопрос:

У меня есть словарь с тремя объектами, и я хочу добавить этот словарь в NSMutableArray в предыдущем представлении стека. Этот массив правильно синтезируется в mainviewcontroller. Однако, когда я пытаюсь

[mainVC.fotoObjectArray addObject:[NSMutableDictionary dictionaryWithDictionary:fotoObject]]; В массив ничего не добавляется.

Похоже, я неправильно выделил / инициализировал его, но он сохраняется в свойстве в предыдущем контроллере представления.

Пользователь делает снимок или выбирает его из альбома с помощью кнопки. Когда он вернется:

PhotoViewController.m

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

NSArray *viewControllers = [self.navigationController viewControllers];
MainViewController *mainVC = (MainViewController *)[viewControllers objectAtIndex:viewControllers.count - 2];
[mainVC setFotoGenomen:@"Ja"];

i = @"foto";
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];

NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
[fotoObject setObject:[NSData dataWithData:imageData] forKey:@"image"];

[mainVC.fotoObjectArray addObject:[NSMutableDictionary dictionaryWithDictionary:fotoObject]];

//display image
UIImageView *imageView = [[UIImageView alloc] init];
[imageView setFrame:CGRectMake(10.0f, 120.0f, 300.0f, 300.0f)];
imageView.backgroundColor = [UIColor whiteColor];
[[self view] addSubview:imageView];
[imageView setImage:image];
[self dismissModalViewControllerAnimated:YES];
[self.tableView reloadData];
[imageView release];

}
  

В то же время GPS регистрируется в PhotoViewController.m при загрузке представления

 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
      fromLocation:(CLLocation *)oldLocation 
{ 
CLLocationCoordinate2D location = newLocation.coordinate; 

fotoObject = [[NSMutableDictionary alloc] init];
[fotoObject setObject:[NSNumber numberWithDouble:location.latitude] forKey:@"latitude"];
[fotoObject setObject:[NSNumber numberWithDouble:location.longitude] forKey:@"longitude"];

} 
  

Параметр ‘fotoObject’ содержит правильные ключи и значения. Теперь ему просто нужно поместить этот словарь в NSMutableArray MainViewController.m .

Комментарии:

1. Проверьте в отладчике, что mainVC на самом деле является тем объектом, которым вы его считаете — если вы регистрируете mainVC.fotoObjectArray, вы видите что-нибудь? Есть ли там какие-либо другие объекты?

2. Нет, когда я регистрирую это, он возвращает null

3. mainVC или mainVC.fotoObjectArray?

4. mainVC.fotoObjectArray возвращает null сразу после вставки словаря, а также возвращает null обратно в mainviewcontroller.

Ответ №1:

Похоже, вы никогда не инициализируете массив в mainVC. Если вы только что получили синтезированные средства доступа, они вернутся nil , если вы явно не настроили массив.

В viewDidLoad методе mainVC у вас может быть что-то вроде:

 if (!self.fotoObjectArray)
    self.fotoObjectArray = [NSMutableArray array];
  

Это гарантирует, что у вас действительно есть массив для добавления объектов.

Комментарии:

1. Спасибо! Вот и все! Я знал, что это было что-то вроде этого.