7

これは私の問題の更新です。プログラムが中止されると、この警告が表示されます。 警告: フレーム内にないブロックで USE_BLOCK_IN_FRAME 変数を作成しようとしています。

これが何を意味するのかについては、あまり情報が見つかりません。


これは私を困惑させました。EXC_BAD_ACCESS エラーが発生します。私は NSZombieEneabled を持っています (以前の問題を解決しました) が、トレースするコール スタックがありません。

別のフェッチされた結果コントローラーに関して機能しているほぼ同一のコードがいくつかあります。

これは、ジョブ エンティティとそれに関連付けられたクライアント エンティティとの関係と関係があるようです。関係は [ジョブ エンティティ] <<--> [クライアント エンティティ] です。

最初に、選択した行に対応するジョブ エンティティに関係を介してリンクされたクライアント エンティティがない場合、コードはエラーなしで動作することがわかります。したがって、失敗した場合、これはクライアント エンティティを指しますが、失敗していない場合、ポインターは nil です。

この問題が発生した場合、アプリケーションを起動し、直接ジョブ ピッカー ビューに移動してセルを選択します。問題が発生するのはその時点です。

すべてのクライアント エンティティのフェッチが発生することがわかっているので、アプリケーションを起動して最初にクライアント ピッカー ビューに移動するという実験を行いました。次に、ジョブ ピッカー ビューに移動し、セルを選択しました。問題は発生しませんでした。

既にフェッチされたジョブ エンティティへのポインターを渡そうとしているだけなので、何が起こっているのかわかりません。

ちなみに、NSFetchedResultsControllers の使用に切り替える前は、コードは正常に機能していました。私は彼らが私のためにできることを気に入っていますが、私が理解していないいくつかのダイナミクスがここで起こっています.

ログには、問題の解決に向けて理解していることは何も示されていません。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath];
    NSLog(@"\n\n(1 Pick) indexPath: %@\n",indexPath);
    NSLog(@"\n\n(1 Pick) userState: %@\n",userState);    
    NSLog(@"\n\nnumber of Objects in job fetchresultscontroller = %d", [[fetchedResultsController fetchedObjects] count] );    
    NSLog(@"\n\n(1 Pick) selected job: %@\n",[self.fetchedResultsController objectAtIndexPath:indexPath]); // This line is causing the problem...
    NSLog(@"\n\n(1 Pick) selected job: %@\n",userState.selectedJob); // Omitting the line above, this line fails 
    [self.navigationController pushViewController:userState.jobInfoTVC animated:YES];     
}

デバッグ出力は

2011-05-07 09:27:04.142 job1[6069:207] 

(1 Pick) indexPath: <NSIndexPath 0x5952590> 2 indexes [0, 3]
2011-05-07 09:27:04.142 job1[6069:207] 

(1 Pick) userState: <UserStateObject: 0x5919970>
2011-05-07 09:27:04.143 job1[6069:207] 

number of Objects in job fetchresultscontroller = 4
(gdb) 

最終的なコードは次のように単純になるはずです。これにより、すべてのログが記録されました。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath]; // Original failure was at this line
    [self.navigationController pushViewController:userState.jobInfoTVC animated:YES];     
}

シングルトンの userState を使用して、ユーザーが行ったことを追跡します。そのため、最後の selectedJob および selectedClient エンティティ ポインターをそこに保持します。これは、NSFetchedResultsController に切り替える前は問題なく機能していました。

4

2 に答える 2

1

Attempting to create USE_BLOCK_IN_FRAME variable with block that is not in the frame にも問題がありました。私のものはNSFetchedResultsControllersとは何の関係もありませんでしたが。

おそらくあなたの問題

シングルトンを使用していることに気付いたので、このリンクで問題が解決する可能性があります。

http://npenkov.com/2011/08/01/solving-issues-like-warning-attempting-to-create-use_block_in_frame-variable-with-block-that-isnt-in-the-frame/

リンクから:

@synthesize の前にマクロを使用したセッション マネージャーで正確に - これが問題でした。したがって、次のようなものがある場合:

SYNTHESIZE_SINGLETON_FOR_CLASS(SessionManager)
@synthesize loggedUserId, ...

それを次のように置き換えるだけです:

@synthesize loggedUserId, ...
SYNTHESIZE_SINGLETON_FOR_CLASS(SessionManager)

enter code here

私の問題

私が抱えていた問題は、変数宣言を複製することでした。この場合、変数は NSManagedObject から継承されました。

- (void)functionThatDoesSomething {

    VariableInheritedFromNSMObj *variableA = nil;

    for (VariableInheritedFromNSMObj *variableA in [self containerObject]) {
         NSLog(@"a = %@\n", [variableA name]);
    }

    [variableA setName:@"StackOverflow"];

}

variableA が nil に初期化されている最初の行を、ループの後に移動して問題を修正しました。私の製品コードでは、変数の 1 つの名前を変更しました。

この問題に遭遇したあなたや他の誰かに役立つことを願っています. このエラーは、さまざまな形で現れるようです。

于 2011-11-24T03:24:58.027 に答える
0

Xcode 4.2 でサポートされているデバッグよりも低いバージョンに展開対象の OS バージョンが設定されていますか? これが私に起こったとき、展開ターゲットはどういうわけか 4.1 に変更されましたが、4.0-4.1 の追加のデバッグ サポートなしで 4.3 シミュレータしかありませんでした。

これを修正するには、次の方法があります。

  1. Xcode の設定から、下位の OS バージョンのデバッグ シンボルをインストールします。ダウンロード、コンポーネントに移動し、OS 4.0 - 4.1 Device Debugging Support (必要な場合はそれ以前) をインストールします。
  2. デプロイメント ターゲットを 4.3 以降に設定します。

前者を選択した場合は、設定でボックスにチェックを入れて、更新を自動的にダウンロードすることをお勧めします。

于 2011-11-16T16:01:38.793 に答える