Objective c iOS-钥匙链-锁盒,首次启动时不保存阵列

Objective c iOS-钥匙链-锁盒,首次启动时不保存阵列,objective-c,ios,xcode,Objective C,Ios,Xcode,我可能做错了什么,但当我使用下面的代码,并希望在应用程序首次启动时Lockbox将元素保存到钥匙链时,不会存储任何内容。如果我再次运行应用程序并在else部分中添加元素,那么它会保存数据 有什么建议吗 NSString *value = @""; NSArray *array = [Lockbox arrayForKey:@"TestKey"]; value = [array componentsJoinedByString:@"|"]; if(value == nil) { BOOL

我可能做错了什么,但当我使用下面的代码,并希望在应用程序首次启动时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);

}

哈!!知道了。。一开始我没看到:

第一次,密钥链中没有存储任何内容,因此数组为零

然后,值应为[nil componentsJoinedBy…]

值为零

因此[nil stringByAppendinString始终为nil,并且在第一次运行时将保存一个空数组


在第二次运行时,数组不是nil,因为Lockbox读回空数组 (那么所有工作都是如此)

想法、改变:

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

if(value==nil)
...


你在哪里有这段代码?我尝试过在方法didFinishLaunchingWithOptions中的AppDelegate中使用它,并在我的设置视图中的viewDidLoad中使用它。更改为此,使用value.length==0作为测试,但保存直到第二次运行才完成。有点像它必须先存储某个空的东西。但我也尝试存储某个东西empty,然后在第一个应用程序启动后存储数组,但在第二个应用程序启动前它不会保存。抱歉,如果(数组)…else value=@“”|编辑了我的答案当您尝试附加到它时,点是value为nil…msgs到nil将导致nil
NSArray *array = [Lockbox arrayForKey:@"TestKey"];
if(array)
     value = [array componentsJoinedByString:@"|"];
else
     value = @"";

if(value.length)
...