0

我可能做错了什么,但是当我使用下面的代码并希望 Lockbox 在应用程序第一次启动时将元素保存到钥匙串时,什么都没有存储。如果我然后再次运行应用程序并在 else 部分中添加元素,那么它会保存数据。

有什么建议么?

NSString *value = @"";
NSArray *array = [Lockbox arrayForKey:@"TestKey"];
value = [array componentsJoinedByString:@"|"];

if(value == nil)
{
    BOOL result = NO;
    NSArray *narray = [NSArray arrayWithObjects:
                       [value stringByAppendingString:@"key1"],
                       [value stringByAppendingString:@"key2"],
                       [value stringByAppendingString:@"|http://www.url.com/"],
                       [value stringByAppendingString:@"|http://www.url2.com/"],nil];
    result = [Lockbox setArray:narray forKey:@"TestKey"];
}else{
    NSArray *narray = [NSArray arrayWithObjects:
                       [value stringByAppendingString:@"key1"],
                       [value stringByAppendingString:@"key2"],
                       [value stringByAppendingString:@"|http://www.url.com/"],
                       [value stringByAppendingString:@"|http://www.url2.com/"],nil];
    result = [Lockbox setArray:narray forKey:@"TestKey"];

    NSString *keyv1 =[array objectAtIndex:0];
    NSLog(@"key value %@",keyv1);

}
4

1 回答 1

0

哈!明白了..一开始没看到:

第一次,没有任何东西存储在钥匙串中,所以数组是 NIL

值应该是 [nil componentsJoinedBy...]

价值为零!

所以 [nil stringByAppendinString 将始终为 nil,并且在第一次运行时将保存一个 EMPTY 数组


在第二次运行时数组不是 nil,因为 Lockbox 会读回空数组(所以一切正常)

想法,改变:

NSArray *array = [Lockbox arrayForKey:@"TestKey"];
value = [array componentsJoinedByString:@"|"];

if(value==nil)
...

NSArray *array = [Lockbox arrayForKey:@"TestKey"];
if(array)
     value = [array componentsJoinedByString:@"|"];
else
     value = @"";

if(value.length)
...
于 2012-11-17T11:17:06.470 回答