Vjardel
Vjardel

Reputation: 1075

Change NSString value for ever : NSUserDefaults?

I have two views :

View1 (Shop) : URL stocked in NSString for displaying image.

View2 (ModifyShop) : Text field with URL from view1.

I can pass data from view1 to view2 : The URL stocked in NSString appears in Text field and pass data from view2 to view1. (URL for example)

Now I would like to modify this URL with Text field from view2 and that modify the NSString in view1 for ever. How can I make that ? Using NSUserDefaults ?

Here is my code :

Shop:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.modifyButton setHidden:YES];

}

-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"admin"]) {
        NSLog(@"pas admin");
    } else {
        [self.modifyButton setHidden:NO];
    }
    dispatch_async(dispatch_get_global_queue(0,0), ^{
        self.imageButtonURL = @"http://bundoransurfshop.com/wp-content/uploads/2015/02/72-torq-pink.jpg";
        imageButtonData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:self.imageButtonURL]];
        if ( imageButtonData == nil )
            return;
        dispatch_async(dispatch_get_main_queue(), ^{
            self.imageButton.imageView.image = [UIImage imageWithData: imageButtonData];
        });
    });
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"modifyShop"]) {
        ShopModify *viewcontroller = (ShopModify *)segue.destinationViewController;
    viewcontroller.imageButtonURL = self.imageButtonURL;      }
}

-(IBAction)prepareForUnwindShopModify:(UIStoryboardSegue *)segue {
    NSLog(@"%@", self.imageButtonURL);
}

Shopmodify:

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    self.photoURL.text = [NSString stringWithFormat:@"%@", self.imageButtonURL];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        Shop *viewcontroller = (Shop *)segue.destinationViewController;
        viewcontroller.imageButtonURL = self.photoURL.text;
}

Upvotes: 1

Views: 41

Answers (2)

uraimo
uraimo

Reputation: 19801

If with foverer you mean even after you close and open again your app, replacing the default http://bundoransurfshop.com/wp-content/uploads/2015/02/72-torq-pink.jpg, yes, for example you could use NSUserDefaults (or any other persistent way to store your data/configuration).

Save on edit in view2:

[[NSUserDefaults standardUserDefaults] setObject:valueToSave 
                                          forKey:@"imageUrl"];
[[NSUserDefaults standardUserDefaults] synchronize]; //Important

Load/Reload in view1:

NSString *savedUrl = [[NSUserDefaults standardUserDefaults] stringForKey:@"imageUrl"];
if(!savedValue){
   savedUrl = @"http://bundoransurfshop.com/wp-content/uploads/2015/02/72-torq-pink.jpg";
}

Official documentation for NSUserDefaults.

Upvotes: 1

Alex
Alex

Reputation: 3971

You can store a URL string in NSUserDefaults by following this post:

Save string to the NSUserDefaults?

Simply have your view1 always get it from NSUserDefaults in viewWillAppear and have view2 change the NSUserDefaults key for the URL string and that should do it

Upvotes: 2

Related Questions