あなたはあなたの問題の周りのコードを共有していないので、あなたの問題は機能不全のキーチェーンではなく、むしろいくつかのコーディングエラーにあると思います。
一般的な落とし穴は次のとおりです。KeyChainAPIは「C」であり、Cスタイルのnullで終了する文字列バッファのみを受け入れるため、通常、CFString/NSStringオブジェクトをAPIに渡す前にCバッファに変換する必要があります。
多くは次のようなものを使用します:
const char *usernameCStr = [username UTF8String];
NSStringまたはそのCFStringコンパニオンの場合...
const char *CFStringGetCStringPtr(CFStringRef theString, CFStringEncoding encoding); /* May return NULL at any time; be prepared for NULL */
これらのAPIがNULLを返す可能性があるという事実を却下します。CF / NSStringの内部バッファが連続していないか、要求したエンコーディングに含まれていないか、またはcと互換性がないためです。
このような問題は、実行時に説明したとおりに動作する可能性があります。
このような場合は、問題をキャッチし、別のAPIを使用してCF/NS文字列をCバッファにコピーする必要があります。
Boolean CFStringGetCString(CFStringRef theString, char *buffer, CFIndex bufferSize, CFStringEncoding encoding);
また
- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding;