Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Swift-单例数据持久性_Ios_Swift_Core Data_Singleton - Fatal编程技术网

iOS Swift-单例数据持久性

iOS Swift-单例数据持久性,ios,swift,core-data,singleton,Ios,Swift,Core Data,Singleton,我正在开发一个应用程序,在CoreData和singleton类中保存有关登录用户的信息。用户登录后,我从coredata获取数据,并从singleton设置变量 我的问题: 如果应用程序收到内存警告问题,并且来自singleton的数据将被释放,我的应用程序将崩溃。在这种情况下我能做什么 谢谢 override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } 默认情况下,您的ViewControll

我正在开发一个应用程序,在CoreData和singleton类中保存有关登录用户的信息。用户登录后,我从coredata获取数据,并从singleton设置变量

我的问题:

如果应用程序收到内存警告问题,并且来自singleton的数据将被释放,我的应用程序将崩溃。在这种情况下我能做什么

谢谢

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

默认情况下,您的ViewController将使用此方法,并且在应用程序崩溃之前,此方法将自动执行,您应该在此方法中编写一些代码,以确保您的数据可以保存在设备中,然后释放它。

假设您在singleton的
.m
文件中有一个名为
NSArray*myArray
的本地属性,其中存储了所有需要的数据。您所需要做的就是在头文件中添加一个方法,如果该方法不是
nil
,则返回该数组,如果
nil
,则使其从存储器重新加载并返回。
同时重写
-(void)didReceiveMemoryWarning
方法,并在出现内存警告时保存数据。
以下是用objective-c编写的示例代码:

//Singleton.h file
- (NSArray *)storedData;

//Singleton.m file
@property NSArray *myArray;
...
- (NSArray *)storedData
{
    if (_myArray == nil)
        _myArray = [self fetchMyArrayFromLocalStorage];

    return _myArray;
}

- (NSArray *)fetchMyArrayFromLocalStorage
{
    //Some code to fetch data from local storage
}

- (void)saveMyArrayToLocalStorage
{
    //Code to save _myArray to local storage
}

- (void)didReceiveMemoryWarning
{
    [self saveMyArrayToLocalStorage];
    _myArray = nil; //Remove array if is needed
    [super didReceiveMemoryWarning];
}
现在,只需调用方法:

[[mySingleton sharedInstance]storedData]

好的,我知道。但在这种情况下,来自单例的变量将变为零,因此我需要再次从coreData获取数据,并再次从单例设置变量,否?谢谢您的回答!因此,如果存储在单例中的数据由于内存减少而被删除,那么再次获取该数据的唯一方法是再次获取本地数据库。