【问题标题】:Checking to see if NSUserDefaults was used in an older version of the app检查是否在旧版本的应用程序中使用了 NSUserDefaults
【发布时间】:2017-02-27 21:29:26
【问题描述】:

我有一个几年前用 Obj C 开发的应用程序。我使用 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. 新应用安装和更新旧应用。
  5. 当我检查 NSUserDefaults 中的 personDataArray 时,打印返回 false

我错过了什么?

【问题讨论】:

    标签: ios xcode swift3 nsuserdefaults


    【解决方案1】:

    键personDataArray 的值是一个数组,它是一个对象而不是Bool

    相当于 Swift 的

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

    请不要在 Swift 中使用蛇形大小写 (GD_Owed_Person),使用骆驼形大小写 (GDOwedPerson)

    【讨论】:

      【解决方案2】:

      这是错误的:

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

      正确的方法是你在上面的代码中所做的:

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

      我猜你这里也有问题(试试arrayForKey):

      NSArray *tempArray = [userData arrayForKey:@"personDataArray"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        相关资源
        最近更新 更多