2017-02-27 88 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"]; 
    
    相关问题