1

Я хочу, чтобы добавить изображение из галереи/Камеры для NSMutableDictionary & я использую следующие методы, которые я нашел Hereмассива объекты обновления без правопреемника

[dict setObject:UIImageJPEGRepresentation(chosenImage,0.5) forKey:@"image_four"]; 

[documents replaceObjectAtIndex:0 withObject:dict]; 

[tableOne reloadData]; 

В ячейке для строки в Indexpath

[cell.oneImgView setImage:[[UIImage alloc]initWithData:[dict objectForKey:@"image_four"]]]; 

I m добавление объектов NSMutableDictionary в один глобальный массив в ViewController A & Отправка его в ViewController B, где я добавляю/обновляю изображение из галереи/камеры.

но когда я нажму кнопку назад и вернусь назад UIViewController A, а затем снова войдите в контроллер контроллера B, эти изображения все еще находятся в этом массиве.

Короче говоря, всякий раз, когда я добавить изображение в массив UIViewController B это некоторые, как влияет на массив UIViewController А.

Я хочу, чтобы это было сделано на Done нажатием кнопки, но если я нажимаю на заднюю кнопку панели навигации он делает то же самое, что и кнопка «Готово».

- (IBAction)goToBack:(id)sender { 

    [self.navigationController popViewControllerAnimated:YES]; 
} 

Может ли кто-нибудь сказать мне, где я ошибаюсь?

+0

Что вы хотите сделать сейчас? – user3182143

+0

что это за строка ", но когда я нажимаю кнопку назад и возвращаюсь обратно UIViewController A, а затем снова перехожу к контроллеру B, эти изображения все еще находятся в этом массиве"? – user3182143

+0

Моя проблема заключается в том, что я добавляю данные изображения в словарь и обновляю его до массива контроллера вида b, затем он меняется в основном массиве предыдущего контроллера представления A без причины и без кода, чтобы делать такую ​​вещь. –

ответ

0

Наконец, решается путем копирования объектов NSObject class & добавление массива.

[[controllerb setDocuments1] addObjectsFromArray: array];

+0

Вот что я дал вам, наконец, в разделе part.I дал вам NSObject Class. – user3182143

+0

Нет. Как мы видим в ответе, вы сохранили его в nsuserdefaults, что плохо для памяти, и мой подход совершенно другой. –

0

Создайте еще один массив и присвоить массив ViewController в массив

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    ViewControllerB *controllerb = [segue destinationViewController]; 
    [controllerb setDocuments1:sender]; 
} 

ViewControllerB.h

@property (nonatomic, strong) NSMutableArray *documents1; 

ViewController.m

#import "ViewControllerB.h" 
#import "UploadCell.h" 

@interface ViewControllerB() 
{ 
    NSArray *arrSavedObjects; 
} 

@end 

@implementation ViewControllerB 
@synthesize documents,documents1; 


-(void)viewWillAppear:(BOOL)animated 
{ 
    arrSavedObjects = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayObjects"]; 
    documents = [NSMutableArray arrayWithArray:arrSavedObjects]; 
    if(documents.count==0) 
    { 
     documents = documents1; 
    } 
} 
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info 
{ 
    UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; 
    //NSMutableDictionary *dict = [documents objectAtIndex:selected]; 
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:[documents objectAtIndex:selected]]; 
    if (![dict objectForKey:@"image1"]) { 
    [dict setObject:UIImageJPEGRepresentation(chosenImage, 0.5) forKey:@"image1"]; 
    } 
    else{ 
    [dict setObject:UIImageJPEGRepresentation(chosenImage, 0.5) forKey:@"image2"]; 
    } 
    [documents removeAllObjects]; 
    [documents addObject:dict]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:documents forKey:@"arrayObjects"]; 
    [defaults synchronize]; 

    [tableDocuments reloadData]; 
    [controller dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Это не решает проблему, так как хранить это много NSData не является хорошей практикой, это будет замедлять приложение сравнительно. –

+0

Вы запрашиваете сохранение объектов в массив, и после изменения мы вернемся к контроллеру A. Затем, когда мы вернемся к контроллеру B, он должен показать сохраненные объекты данных. Для одного набора данных, которые я сохранил в NSUserDefault просто. Согласно ваш вопрос я поставил решение. Вы должны четко задать свой вопрос. – user3182143

+0

Сохранить только в том случае, если я нажимаю кнопку Готово (завершено), но не на popviewcontorller (отменить) –

Смежные вопросы