2013-11-03 3 views
14

のためにクラッシュします。ここには私が従うことを試みているSOC上の解決策があります:wrapperをiOSのKeyChainに保存してください。保存するには、Appleがその<a href="http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_h.html" rel="nofollow noreferrer">GenericKeyChain sample code</a>でKeyChainItemWrapperクラスを提供してきたパスワード

ラッパーの使用法は、このようなものです:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"F11-email-auth" accessGroup:nil]; 
[keychain setObject:[emailTextfield text] forKey:(__bridge id)(kSecMatchEmailAddressIfPresent)]; 
[keychain setObject:[passwordTextfield text] forKey:(__bridge id)(kSecClassGenericPassword)]; 

電子メールのテキストフィールドを持つ行が受け入れられています。 しかし、パスワードを含む2行目は、次の例外を除いてクラッシュします。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x01b445e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x018c78b6 objc_exception_throw + 44 
    2 CoreFoundation      0x01b44448 +[NSException raise:format:arguments:] + 136 
    3 Foundation       0x014a823e -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116 
    4 Feeltracker       0x000053b3 -[KeychainItemWrapper writeToKeychain] + 899 
    5 Feeltracker       0x00004700 -[KeychainItemWrapper setObject:forKey:] + 272 
    6 Feeltracker       0x000092d6 -[FTLoginViewController connectToAccount:] + 374 
    7 libobjc.A.dylib      0x018d9874 - 

何らかの理由が考えられますか?私はそれが私が使用している定数とは何か関係があるのだろうかと思います。

UPDATE:rmaddyの助けに

ありがとう:

これは、エラーをスローするようだ少しです:

// No previous item found; add the new one. 
result = SecItemAdd((__bridge CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL); 
NSAssert(result == noErr, @"Couldn't add the Keychain Item."); 

結果は-50です。 SecItemAddはlibメソッドです。 enter image description here

+0

コードなしではどういう意味ですか?上にリンクしたWrapper全体をコピーして貼り付けてもらいたいですか?私は何をしたのか正確にあなたを示しました。 (Appleのラッパー、サードパーティーではなく、ここでスパムコメントをする前に、リンクをクリックしてください) – Houman

+0

Daij-Djan、悪い一日を過ごしているのか、単に幼稚なのか分かりません。まず、あなたは、あなたがdownvoting/closeを開始する理由なしに迷惑メールのコメントであり、それからあなたのコメントを削除して、それを追跡しないようにします。あなたが助けたいと思わないなら、その罰金。あなたがしていることは役に立たず、プロフェッショナルでもありません。 – Houman

+0

デバッガを使用し、 'SecItemAdd'の戻り値を調べます(結果コードを含むようにlog文を更新します)。次に、「キーチェーン項目を追加できませんでした」というエラーメッセージを検索し、同じエラーコードを参照するものを探します。いくつかの原因が考えられます。エラーコードはそれを多く絞り込みます。 – rmaddy

答えて

15

私はもはやキーホルダーラッパー作業のため、このアップルの例を得ることができませんでした:私は期待していたように、これは何とか

keychainItemDataは含まれています...直接扱うキーチェーンに関連しています。 幸いなことに、この問題についてさらに調査した結果、solutionが私に役立ちました。

ソリューションへの元の答えがARC'edされていない注意してください、しかし誰かがARC'ed version on Githubを作成することがとても親切でした。私はその1つを使用し、魅力のように動作します。

それは本来のものよりも、単純に機能キーチェーン、ラッパです。

が、これは同様の問題を他の人に役立ちます願っています。

+2

JNKeychainは私のためにすごくうまくいった! – malhal

+0

グループをサポートしています – vatti

5

シミュレータ上でアプリケーションを実行しているとき、私は同じエラーを持っていたが、それは、デバイス上で完全に働きました。私は、「共有キーチェーンの権利」をオンにする必要がありましたシミュレータで問題を解決するために

Share keychain entitlement

+0

これをオンにすると私の問題が解決しました。ありがとう! –

関連する問題

 関連する問題