检查是否在较旧版本的应用程序中使用了NSUserDefaults

时间:2017-02-27 21:29:26

标签: ios xcode swift3 nsuserdefaults

我有几年前在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"))

以下是我为上述print语句生成false的步骤。

  1. 在测试iPhone时从应用商店下载应用。
  2. 输入一些用户数据并保存。
  3. 在测试iPhone上通过Xcode运行新应用程序。
  4. 新应用安装和更新旧应用。
  5. 当我在NSUserDefaults
  6. 中检查personDataArray时,Print返回false

    我错过了什么?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

这是错误的:

function f1(event)
{
$.when(
$(this).parent('table#fsg').css("background-color", "red"),
console.log('gff'))
}

正确的方法与上面的代码一样:

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

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

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