Objective c iOS-钥匙链-锁盒,首次启动时不保存阵列
我可能做错了什么,但当我使用下面的代码,并希望在应用程序首次启动时Lockbox将元素保存到钥匙链时,不会存储任何内容。如果我再次运行应用程序并在else部分中添加元素,那么它会保存数据 有什么建议吗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
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)
...