問題タブ [objective-c-blocks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1418 参照

iphone - switchステートメントでのALAssetGroupTypeの比較

こんにちは私はALAssetsLibraryのを呼んでいます

次に、列挙ブロック内で、返されたグループのタイプを比較し、それを関連する配列に追加します。私が試してみました

初期ログは、「グループALAssetsGroup-名前:フォトライブラリ、タイプ:アルバム、アセット数:177」をトレースします。

次のログは「アセットタイプ2」です

しかし、3番目のログは呼び出されません。

私が間違っていることについて何か考えはありますか?

0 投票する
2 に答える
2144 参照

objective-c - Objective-C ブロックの実装で super を呼び出す

Objective-C ブロックの実装では、 superでのメソッドの呼び出しはサポートされていますか?

superでメソッドを呼び出していたときにEXC_BAD_ACCESSエラーがスローされましたが、これらの呼び出しを to から[super methodToCall]toに変更[self methodToCall]し、メッセージをレスポンダー チェーンの上に移動させるとすぐに、問題なく動作しました。

ブロックが存在するクラスのインスタンスには の実装はありませんが-methodToCall、スーパークラス (つまり、自己の継承元のクラス) には実装があります。

ブロックの実装内でスーパーでメソッドを呼び出すことがそもそも(技術的に)問題だった理由の詳細を知りたいので、将来それを避けることができます。変数がブロックでどのようにキャプチャされるか、およびスタックとヒープに関する何かに関連しているのではないかと疑っていますが、具体的な考えはありません。

注: ブロックの実装コードは、ブロックがプロパティに格納されてから数秒後に呼び出されます。プロパティはコピーを使用するため、ブロックのライフサイクルの問題ではないと思います。すべて問題ないようです。また、これは iPhone デバイス (3G) でのみクラッシュしていましたが、iPhone シミュレーターではクラッシュすることなく機能していました。

結果EXC_BAD_ACCESS:

完璧に動作し、スーパークラスに実装-didRetrieveItemsされています。-errorRetrievingItems

0 投票する
2 に答える
859 参照

iphone - ブロックベースのアニメーション?

アップルのドキュメント

彼らはこのように言及しました...しかし、私のアプリは3.0以降をサポートしています。2つの別々のコードを使用する必要がありますか(1つは3.0用、ブロックは4.0以降)。これを達成する方法は?

0 投票する
3 に答える
1814 参照

iphone - iPhone でブロックを使用してデリゲートを設定する

ビュー コントローラーには複数のテキスト フィールドがあり、それらはすべて同じデリゲートを使用します。デリゲートでは、すべてのテキストフィールド (多数の if/else-if または switch ステートメント) を区別する必要があるため、コードは非常に見苦しくなります。私はこの記事にクロスしました:

テキストフィールド デリゲートのブロック

しかし、これから、これがどのように問題を解決するのかまだわかりませんか?これは基本的に1つのメソッドを呼び出してテキストを渡し、メソッドはどのテキストフィールドが文字列を与えたのかわかりませんか? それでもテキストフィールドを区別する必要がありますが、今回はブロック内です (通常の if(textfield == bazTextField)... を使用)。

0 投票する
1 に答える
1770 参照

objective-c - これは正しい Objective-C ブロックの実装ですか?

– stringByReplacingMatchesInString:options:range:withTemplate:テンプレートの代わりにブロックを取るNSRegularExpression のメソッドのバリエーションが必要でした。ブロックの戻り値が置換値として使用されます。ご想像のとおり、これはテンプレートよりも柔軟です。/ePerl 正規表現で修飾子を使用するようなものです。

そこで、メソッドを追加するカテゴリを作成しました。これは私が思いついたものです:

Objective C でブロックを操作するのはこれが初めての試みです。少し奇妙に感じますが、うまく機能しているようです。ただし、それについていくつか質問があります。

  1. これは、そのようなメソッドを実装するための正気な方法のように思えますか?
  2. を使用して内部を実装する方法はあり-enumerateMatchesInString:options:range:usingBlock: ますか? posやってみたのですが、ブロック内から代入できませんでした。しかし、それを機能させる方法があれば、NSMatchingFlags と BOOL も渡して、その方法と同じ方法で処理するのがクールでしょう。できる?

アップデート

Dave DeLong からの回答のおかげで、ブロックを使用した新しいバージョンを入手できました。

うまくいきました、ありがとう!

0 投票する
6 に答える
64643 参照

objective-c - enumerateObjectsUsingBlockとforを使用する場合

明らかな違いに加えて:

  • enumerateObjectsUsingBlockインデックスとオブジェクトの両方が必要な場合に使用します
  • enumerateObjectsUsingBlockローカル変数を変更する必要がある場合は使用しないでください(これについては間違っていました。bbumの回答を参照してください)

一般的に、いつうまくいくかはenumerateObjectsUsingBlock良いか悪いかと考えられていますfor (id obj in myArray)か?長所/短所は何ですか(たとえば、パフォーマンスは多かれ少なかれ)?

0 投票する
1 に答える
1082 参照

iphone - ゲームセンターの認証ブロックが呼び出され続ける

そのため、initializeGameCenter() を 1 回呼び出した後、アプリケーションがフォアグラウンドに戻るたびに (authenticateWithCompletionHandler の後) 以下のブロックが呼び出されることに気付きました - これは Game Center の通常の動作ですか?? (ブレークポイントを配置して、ブロックのみが呼び出され、initializeGameCenter 自体が呼び出されないことを確認しました)

0 投票する
1 に答える
3161 参照

ipad - iOS:互換性のないブロックポインタタイプ

このコード:

このコンパイル時エラーを生成しています:

'void(^)()'を初期化する互換性のないブロックポインタタイプ、予期される' void(^)(void)'

何が得られますか-これは以前は機能していました(実際、他のプロジェクトで問題なくコンパイルされます-(チェックしたばかりです)。見落としたコンパイラ/プロジェクト設定はありますか?

ベースSDKは4.2、展開ターゲットは4.2です

0 投票する
4 に答える
17515 参照

ios - addObserverForName:object:queue:usingBlockの正しい管理:

私はまだobjective-cのブロックに慣れておらず、この疑似コードが正しいかどうか疑問に思っています。オブザーバーを削除するだけで十分なのか、removeObserver:name:object:を呼び出す必要があるのか​​わかりません。

更新:このブロックから断続的に受信しているEXC_BAD_ACCESSので、これは正しくありません。

0 投票する
2 に答える
5655 参照

objective-c - EXC_BAD_ACCESS ブロックの呼び出し

更新 | パネルを使用してクラッシュするサンプル プロジェクトをここにアップロードしました: http://w3style.co.uk/~d11wtq/BlocksCrash.tar.gzまだ実装されていません)。

更新 2 | newFilePanelクラッシュを引き起こすために何かを呼び出す必要さえないことを発見したばかりで、ステートメントで使用するだけで済みます。

これもクラッシュを引き起こします。

コンソールに最後にダンプされるのは、「dyld_stub_objc_msgSend_stret を逆アセンブルできません」である場合もあれば、「アドレス 0xa のメモリにアクセスできません」である場合もあります。

私は独自のシート (NSPanel サブクラス) を作成しました。これは、NSOpenPanel/NSSavePanel に似た API を提供しようとします。シートとして表示され、完了時にブロックが呼び出されます。

インターフェースは次のとおりです。

そして、実装内の主要なメソッド:

私のブロックが空の本体を持つノーオペレーションである場合、これはすべて機能します。シートが閉じられると、私のブロックが呼び出されます。

しかし、ブロック内からパネルにアクセスしようとするとすぐに、EXC_BAD_ACCESS でクラッシュします。たとえば、これはクラッシュします:

原因はデバッガーからは明らかではありません。スタックの最初の項目 (ゼロ 0) は単に「??」と表示されます。そして何も記載されていません。

スタック内の次の項目 (1 と 2) は、それぞれ と の呼び出し-endSheet:returnCode:です-dismissSheet:。デバッガーで変数を調べると、問題や範囲外のものはないようです。

パネルが解放されたのではないかと思っていましたが (自動解放されているため)、-retain作成した直後に呼び出しても役に立ちません。

私はこれを間違って実装していますか?