2017-02-27 23 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")) 

以下是我對上述打印語句產生錯誤的步驟。

  1. 從應用程序商店下載應用程序測試iPhone的應用程序。
  2. 輸入一些用戶數據並保存。
  3. 通過測試iPhone上的Xcode運行新應用程序。
  4. 新應用安裝並更新舊應用。當我檢查personDataArray NSUserDefaults的內部

我缺少的是

  • 打印返回false?

  • 回答

    1

    personDataArray的值是一個數組,它不是一個對象Bool

    雨燕相當於是

    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) 
        } 
    } 
    

    請不要用蛇的情況下(GD_Owed_Person)的斯威夫特,使用駱駝情況下(GDOwedPerson)

    0

    這是錯誤的:

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

    正確的做法是,你在上面的代碼所做的:

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

    我猜你有一個問題在這裏太(試行arrayForKey):

    NSArray *tempArray = [userData arrayForKey:@"personDataArray"]; 
    
    相關問題