2017-02-27 10 views
0

私は数年前にObj Cで開発されたアプリを持っています。 NSUserDefaultsを使用して次のように表示するデータを作成しました。NSUserDefaultsが古いバージョンのアプリケーションで使用されていたかどうかを確認する

NSUserDefaults *userData = [NSUserDefaults standardUserDefaults]; 
    if ([userData objectForKey:@"personDataArray"]==nil) 
    { 
     mutableDataArray = [[NSMutableArray alloc] init]; 
    } 
    else 
    { 
     // get the array back out of NSUserDefaults 
     NSArray *tempArray = [userData objectForKey:@"personDataArray"]; 
     // NSLog(@"The count in the temp saved data is %lu", (unsigned long)tempArray.count); 

     // look for any NSData objects in my temp array 
     for (NSData *personData in tempArray) 
     { 
      // set a instance of the person class to each NSData object found in the temp array 
      GD_Owed_Person *personObject = [[GD_Owed_Person alloc] init]; 
      personObject = [NSKeyedUnarchiver unarchiveObjectWithData:personData]; 
      // NSLog(@"CHECK ON THE ARRAY %@", personObject.personsBillsArray); 
      [mutableDataArray addObject:personObject]; 
     } 
    } 

デフォルトの名前はpersonDataArrayです。

新しいバージョンのアプリ(Swift 3)では、古いデフォルトを使用したいと考えています。私が抱えている問題は、それらのデフォルトが存在するかどうかを確認するときにチェックして、私が間違っていることです。

print(UserDefaults.standard.bool(forKey:"personDataArray")) 

ここでは、上記のprint文でfalseを生成する手順を示します。

  1. アプリをテスト用iPhoneにダウンロードしてください。
  2. ユーザーデータを入力して保存してください。
  3. テスト用iPhoneでXcode経由で新しいアプリを実行します。
  4. 新しいアプリは古いアプリをインストールして更新します。
  5. 私は私が何をしないのですNSUserDefaults

内部personDataArrayをチェックしたときに印刷するにはfalseを返しますか?

答えて

1

のキーの値は、オブジェクトではない配列です

スウィフト当量が

var dataArray = [GD_Owed_Person]() 

if let tempArray = UserDefaults.standard.object(forKey:"personDataArray") as? [Data] { 
    for personData in tempArray { 
     let personObject = NSKeyedUnarchiver.unarchiveObject(with:personData) as! GD_Owed_Person 
     dataArray.append(personObject) 
    } 
} 

、キャメルケース(GDOwedPerson)

を使用し、スウィフトにヘビケース(GD_Owed_Person)を使用しないでくださいです
0

これは間違っている:あなたは上記のコードで行ったように

print(UserDefaults.standard.bool(forKey:"personDataArray")) 

正しい方法は次のとおりです。

if ([userData arrayForKey:@"personDataArray"]==nil) { 
    print("false") 
} else { 
    print("true") 
} 

私はあなたがここにも問題を抱えていると思います(arrayForKeyを試してみてください):

NSArray *tempArray = [userData arrayForKey:@"personDataArray"]; 
関連する問題