2017-07-27 15 views
1

Swiftを使ったiOS開発では比較的新しいです(私は実際にJavaを使ってAndroid開発で3年間の経験を持ち、新しい技術を学ぼうとしています)。 shellnutでiOS Swift EXC_BAD_ACCESSコード2 SearchTextField(UITextFieldサブクラス)

https://github.com/apasccon/SearchTextField

、それはドロップダウンの提案/オートコンプリート機能を持つUITextFieldのサブクラスです:私はSearchTextFieldとして知られているライブラリの使用を必要とするアプリケーションを作成しています。以下は

は、それ以外の場合に任意の参照は上記と同じ例外をスローする必要があり、

@IBOutlet var homeAddressTextField: SearchTextField! 
@IBOutlet var workAddressTextField: SearchTextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    homeAddressTextField.delegate = self 
    workAddressTextField.delegate = self 

    homeAddressTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 
    workAddressTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) 

    //vvvvvvvvv EXC_BAD_ACCESS CODE 2 THROWN BELOW vvvvvvvv 
    homeAddressTextField.filterStrings(["foo","bar"]) 
} 

homeAddressTextFieldがインスタンス化されなければならない...それを使用してのViewControllerです。問題のある行にブレークポイントを設定すると、homeAddressTextFieldはであり、それ以外の場合はではなく、SearchTextFieldのインスタンスであることが正しく示されます。

私は多くのことを修正したり、少なくともエラーの原因を見つけました。あなたが分かるように、私はアウトレットの弱いvarの代わりに強いvarを使用しました。

私はゾンビを使用して、割り当てられていないメモリブロックにアクセスしようとする試みを追跡しようとしましたが、ゾンビの機器はゾンビにアクセスしませんでした。

注意する必要がある場合は、問題のあるfilterStrings()を含む行が削除されるとすぐにエラーが消えます。どんな助けもありがとう!

+0

ここでエラー全体を投稿できますか? –

+0

ARCを使用していますか? – Balasubramanian

+1

@SivajeeBattinaこれは私が得ているものなので、 "全体のエラー"が何を意味するか分かりません...質問によって示された行に 'スレッド1:EXC_BAD_ACCESS(コード= 2、アドレス= 0x610000472680)'実行のたびに例外のアドレスが変更されます。 – darkterbears

答えて

2

ライブラリ内のバグが、あなたはそれが自分のリポジトリにまだ未解決の問題である、ここで

SearchTextField Issue

確認してください可能性がありそうです。

レディメイドコードを使用しようとすると、リポジトリの問題を見ているようです。

0

インターフェイスビルダーにIBOutletを接続してもよろしいですか?

クラッシュする行にブレークポイントを配置してみてください。それはその行を実行する直前に停止します。次に、コンソール(command + shift + y)に "lldb"という行が表示されます。そこにカーソルを置き、po homeAddressTextFieldと入力して値が返されるかどうかを確認します。 nilの場合、IBOutletが正しく設定されていないため、不正なアクセスが発生します。

さらにの場合は、サブクラスとモジュールがSearchTextFieldのインターフェイスビルダー内に設定されていることと、コンセント自体を確実に設定していることを確認する必要があります。 viewDidAppear()メソッドでこれらの文字列をフィルタリングして、SearchTextFieldへの参照に問題があるかどうかを確認することもできます。

編集:私はレポのビットを見てきました。 SearchTextFieldにはデータソースと独自のデリゲートがあるため、データソースを設定してプロパティを委譲する必要はありません。最後の行にあるように、フィルタリング可能な文字列を設定するだけで済みます。そのため、コールを削除して、View Controllerをデータソース/デリゲートにしてみてください。

+0

homeAddressTextFieldはnldではなく、lldbとデバッガインタフェースで確認されています。 – darkterbears

+0

私の答えをちょうど更新しました。デリゲート行を削除してみてください。 –

+0

私はデリゲートの行だけでなく、UITextFieldDelegateをクラス宣言から削除しようとしました。それはまだ例外を投げた。実際には、私はそれを修正するためにデリゲートラインを追加しました – darkterbears

関連する問題