2016-07-13 8 views
-1

ログインしているユーザに関する情報をCoreDataとシングルトンクラスに保存するアプリケーションを開発中です。ユーザーログイン後、私はcoredataからデータを取り出して、シングルトンから変数を設定します。iOS Swift - シングルトンデータの永続性

私の質問:

アプリがメモリの警告の問題を受けて、シングルトンからのデータがリリースされる場合は、私のアプリがクラッシュします。このような状況で私は何ができますか?

ありがとうございます!あなたのViewControllerは、デフォルトでは、このメソッドを持っているでしょうし、あなたのアプリケーションがクラッシュする前に、このメソッドが自動的に実行されます

答えて

1

NSArray *myArrayという名前のローカルプロパティがシングルトンの.mファイルにあり、必要なすべてのデータが保存されているとします。あなたがする必要があるのは、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]

+0

ありがとうございました!したがって、シングルトンに格納されているデータがメモリの消耗によって削除された場合、そのデータを再度取得する唯一の方法は、ローカルdbを再度フェッチすることです。 –

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

、あなたのデータがデバイスに保存することができることを確認するために、この方法ではいくつかのコードを記述し、その後、解放する必要がありますそれ。

+0

[OK]を、私はそれを知っています。しかしこの場合、シングルトンの変数はゼロになるので、coreDataからデータを再度取得し、シングルトンから変数を設定する必要はありませんか? –