簡體   English   中英

iOS:NSUserDefaults和UIImageViews

[英]iOS: NSUserDefaults and UIImageViews

我有一個應用程序,該應用程序的行為應該像照相館一樣。 用戶從他們的相機膠卷中選擇一張圖片,這些圖片將顯示在UIImageViews中。 我正在嘗試保存他們選擇的圖像。 我有9個UIImageView,問題是當我為每個UIImageView選擇不同的照片時,關閉並重新啟動該應用程序,所有UIImageViews都是空白。 這是我正在使用的代碼:

- (void)viewWillAppear:(BOOL)animated
{

    self.user = [NSUserDefaults standardUserDefaults];

    NSMutableArray* array = [[self.user objectForKey:@"images"]mutableCopy];
    while(array == nil)
    {
        [self.user setObject:[NSMutableArray arrayWithObject:@""] forKey:@"images"];
        array = [[self.user objectForKey:@"images"]mutableCopy];
        NSLog(@"%@",@"attempting to create an array to store the images in");
    }

}

- (void)applicationDidEnterBackground:(UIApplication*)application {
    NSLog(@"Image on didenterbackground: %@", imageView);
    NSMutableArray* array = [NSMutableArray arrayWithObject:[NSData dataWithData:UIImagePNGRepresentation(imageView.image)]];

    [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView2.image)]];
     [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView3.image)]];
      [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView4.image)]];
       [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView5.image)]];
        [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView6.image)]];
         [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView7.image)]];
          [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView8.image)]];
           [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView9.image)]];

            [self.user setObject:array forKey:@"images"];

            }

- (void)viewDidLoad
    {
        NSMutableArray* array = [[self.user objectForKey:@"images"]mutableCopy];
        imageView.image = [[UIImage alloc] initWithData:[array objectAtIndex:0]];
        imageView2.image = [[UIImage alloc] initWithData:[array objectAtIndex:1]];
        imageView3.image = [[UIImage alloc] initWithData:[array objectAtIndex:2]];
        imageView4.image = [[UIImage alloc] initWithData:[array objectAtIndex:3]];
        imageView5.image = [[UIImage alloc] initWithData:[array objectAtIndex:4]];
        imageView6.image = [[UIImage alloc] initWithData:[array objectAtIndex:5]];
        imageView7.image = [[UIImage alloc] initWithData:[array objectAtIndex:6]];
        imageView8.image = [[UIImage alloc] initWithData:[array objectAtIndex:7]];
        imageView9.image = [[UIImage alloc] initWithData:[array objectAtIndex:8]];



        UIApplication *app = [UIApplication sharedApplication];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidEnterBackground:)
                                                     name:UIApplicationDidEnterBackgroundNotification
                                                   object:app];


        [super viewDidLoad];

    }

- (void)viewDidUnload
    {
        self.user = nil;
    }

一切對我來說都不錯,所以我不知道為什么它們沒有保存/加載。 非常感謝任何幫助,謝謝!

您在viewWillAppear中分配self.user ,它在viewDidLoad之后調用。

您應該將viewDidLoad更改為:

-(void)viewDidLoad {
  self.user = [NSUserDefaults standardUserDefaults];
  // ... rest the same

我不喜歡您的方法(使用NSUserDefaults存儲潛在的大數據)。 也就是說,在完成applicationDidEnterBackground之前,嘗試在NSUserDefaults進行synchronize以將其寫入持久性存儲。 當您的應用程序運行時,通常會定期調用該方法,但是隨着它進入后台,它可能不會自動被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM