1

私は、IBのボタンに接続されたメソッドの開始を持っています。基本的には、初めて実行したときにはすべて正常に動作しますが、2回目に実行したとき(そして、間のデータ)、私は最初のループ(int i)の後にEXC_BAD_ACCESSを取得します。 「EXC_BAD_ACCESS」:私は、プレーンEXC_BAD_ACCESS信号

プログラムは、信号を単純な受信を取得、私はNSZombieEnabledオンになり、それは私には何も教えてくれありません。 sharedlibrary 適用負荷-ルールすべて

は、ここでの方法です:

- (IBAction)start:(id)sender { 

    NSLog(@"1"); 
    NSArray* firstArr = [data objectAtIndex:0]; 
    NSLog(@"2"); 
    for (int i=1; i < [data count]; i++) { 
     NSLog(@"%@", data); 
     NSArray* currArray = [data objectAtIndex:i]; 
     NSString* fileName = [currArray objectAtIndex:[firstArr indexOfObject:@"UseFile"]]; 
     NSString* filePath = [NSString stringWithFormat:@"/%@", fileName]; 
     NSString* saveAs = [currArray objectAtIndex:[firstArr indexOfObject:@"SaveFileAs"]]; 
     NSLog(@"3"); 
     for (int j=0; j < [firstArr count]; j++) { 
      NSLog(@"4"); 
      if ([self isIndexIdentifier:j]) { 
       NSLog(@"5"); 
       NSString* searchStr = [firstArr objectAtIndex:j]; 
       NSString* replaceStr = [currArray objectAtIndex:j]; 
       NSDictionary* error; 
       NSLog(@"6"); 
       NSString* appleScript = [NSString stringWithFormat: 
             @"set searchstring to \"%@\"\n" 
             @"set replacestring to \"%@\"\n" 

             @"tell application \"QuarkXPress\"\n" 
             @"activate\n" 
             @"if (not (exists document \"%@\")) then\n" 
             @"open POSIX file \"%@\" with Suppress All Warnings\n" 
             @"end if\n" 
             @"tell document \"%@\"\n" 
             @"repeat with tb from 1 to count of text box\n" 
             @"tell text box tb\n" 
             @"set (every text where it is searchstring) to replacestring\n" 
             @"end tell\n" 
             @"end repeat\n" 
             @"end tell\n" 
             @"end tell\n", 
             searchStr, replaceStr, fileName, filePath, fileName]; 
       NSLog(@"7"); 

       NSLog(@"%@", appleScript); 

       NSLog(@"8"); 
       NSAppleScript *script = [[NSAppleScript alloc] initWithSource: appleScript]; 
       NSLog(@"9"); 
       [script executeAndReturnError:&error]; 
       NSLog(@"10"); 
       [script release]; 
       NSLog(@"11"); 
       NSLog(@"%@", error); 
      } 
     } 
    } 

}

私は多分、私が何かを見つけることができ、ここでコンソールが二度目だかどうかを確認するために、それをNSLoggedこのメソッドは呼び出されます。

run 
2011-04-02 08:55:38.145 TestUI[4472:a0f] 1 
2011-04-02 08:55:38.145 TestUI[4472:a0f] 2 
2011-04-02 08:55:38.146 TestUI[4472:a0f] (
     (
     UseFile, 
     xxxxxxxxxxxxx, 
     SaveFileAs 
    ), 
     (
     "1.qxp", 
     11111, 
     "" 
    ), 
     (
     "2.qxp", 
     aslkvknv, 
     "" 
    ), 
     (
     "3.qxp", 
     ABCDEFG, 
     "" 
    ), 
     (
     "4.qxp", 
     222222222, 
     "" 
    ), 
     (
     "5.qxp", 
     asdf, 
     adsffdsa 
    ) 
) 
2011-04-02 08:55:38.146 TestUI[4472:a0f] 3 
2011-04-02 08:55:38.147 TestUI[4472:a0f] 4 
2011-04-02 08:55:38.147 TestUI[4472:a0f] 4 
2011-04-02 08:55:38.147 TestUI[4472:a0f] 5 
2011-04-02 08:55:38.147 TestUI[4472:a0f] 6 
2011-04-02 08:55:38.148 TestUI[4472:a0f] 7 
2011-04-02 08:55:38.148 TestUI[4472:a0f] set searchstring to "xxxxxxxxxxxxx" 
set replacestring to "11111" 
tell application "QuarkXPress" 
activate 
if (not (exists document "1.qxp")) then 
open POSIX file "/1.qxp" with Suppress All Warnings 
end if 
tell document "1.qxp" 
repeat with tb from 1 to count of text box 
tell text box tb 
set (every text where it is searchstring) to replacestring 
end tell 
end repeat 
end tell 
end tell 
2011-04-02 08:55:38.148 TestUI[4472:a0f] 8 
2011-04-02 08:55:38.148 TestUI[4472:a0f] 9 
2011-04-02 08:55:38.517 TestUI[4472:a0f] 10 
2011-04-02 08:55:38.517 TestUI[4472:a0f] 11 
Program received signal: “EXC_BAD_ACCESS”. 
sharedlibrary apply-load-rules all 
(gdb) 

答えて

3

最終的なNSLog(error)は、貼り付けた出力にクラッシュする可能性があります。 executeAndReturn:errorInfoパラメータのドキュメントは言う:リターンで

エラーは、エラー情報辞書へのポインタを発生した場合。

(強調が加えられる)。したがって、エラーがなければ、初期化されていないerror変数がガベージ・ポインタではないという保証はありません。

+1

+1、まず、作成時にエラーをnilに設定してみてください。 – jv42

+0

お二人のおかげで、それは問題でした!私はそれをコメントして、それはクラッシュしなかったが、どのようにエラーが発生した場合、私は言うことができますか?私はif(エラー!= nil)nslog ....を試みましたが、クラッシュします。作成時にエラーをnilに設定する必要がありますか?それは自動的にnilではありませんか?それが無ければ、それは何に設定されていますか?とにかく、もう一度感謝します。 – user635064

+1

作成時にnilに設定する必要があります。自動的にnilではありません。それはローカル変数ではなくメンバ変数にのみ当てはまります。初期化されていない変数は、ランダムに発生した値がメモリに格納されているため、異なるランで異なる結果が得られます。 – smorgan

0

ゾンビの楽器であなたのアプリを走らせようか?
あなたの問題は、dataの超過的な可能性が非常に高く、Instrumentsはその問題を明らかにする必要があります。
「ゾンビが検出されました」というメッセージが表示された場合は、メモリアドレスをクリックして拡張詳細パネルを表示します。 (表示→拡張詳細)

+0

この問題は、user635064がすでに「NSZombieEnabled」を試していたことを示しています。問題が解放されたオブジェクトへのメッセージであった場合は、いずれかがそのことを証明します。 –

関連する問題