[英]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.