Objective C - 应用程序重启后Singleton不会保留数据

时间:2015-10-28 20:29:09

标签: ios objective-c singleton

我像这样做一个单身:

+ (CurrentUser *)sharedInstance {
    static id sharedInstance = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}

它有一个名为:

的属性
@property (nonatomic, strong) NSData *profilePicData;

我保存了这样的图像:

[[CurrentUser sharedInstance] setProfilePicData:profilePictureData];

我像这样加载图像:

if ([[CurrentUser sharedInstance]profilePicData]) {

    self.profileImageView.image = [UIImage imageWithData:[[CurrentUser sharedInstance]profilePicData]];
}

图像显示并且一切都很好,但是当我重新启动应用程序并转到包含相同代码的相同视图控制器时,图像不再显示在UIImageView中。这让我相信单身人士不会坚持下去。

如何使用单个对象在应用程序重新启动后保留数据?

1 个答案:

答案 0 :(得分:3)

单例实例仅在应用程序运行时处于活动状态。您需要在设置文件时将profilePictureData保存到文件中,然后在创建单例时再加载该文件,再次运行该应用程序。

写作时,您可以使用[profilePicData writeToURL:atomically:]

然后在您的单身人士的初始化程序中,您应该使用profilePicData再次将此文件加载到[NSData dataWithContentsOfURL:]

用于写入的URL必须与用于加载的URL相同,并且必须位于应用程序的沙箱中。

请参阅NSData's documentation.