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

ハ!それを手に入れました..最初はそれを見ませんでした:

初めて、nothinはキーチェーンに格納されるため、配列はNILになります

その場合、値は[nilcomponentsJoinedBy...]になります。

値はゼロです!

したがって、[nil stringByAppendinStringは常にnilになり、最初の実行時にEMPTY配列が保存されます。


Lockboxが空の配列を読み戻すため、2回目の実行では配列はnilではありません(したがって、すべてが機能します)

アイデア、変更:

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 に答える