#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. Спасибо! Вот и все! Я знал, что это было что-то вроде этого.