Сигнал EXC_BAD_ACCESS - PullRequest
       19

Сигнал EXC_BAD_ACCESS

1 голос
/ 02 апреля 2011

У меня есть метод start, который подключен к кнопке в IB, и, по сути, при первом его запуске все работает нормально, но когда я запускаю его во второй раз (и уверяю вас, с данными больше ничего не происходитмежду ними), я получаю EXC_BAD_ACCESS после первого цикла (int i).Я включил NSZombieEnabled, и он ничего мне не говорит, я просто получаю простой

Программа получила сигнал: «EXC_BAD_ACCESS».sharedlibrary apply-load-rules all

Вот метод:

- (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);
            }
        }
    }

}

Я NSL выполнил поиск, чтобы посмотреть, смогу ли я найти что-нибудьутешите второй раз метод вызывается:

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) 

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Ваш окончательный NSLog (из error) вполне может быть тем, что вылетает в выводе, который вы вставили. Документы для errorInfo параметра executeAndReturn: говорят:

При возврате, , если происходит ошибка , указатель на словарь с информацией об ошибке.

(выделение добавлено). Поэтому, если нет ошибки, нет гарантии, что ваша неинициализированная переменная error не является указателем мусора.

0 голосов
/ 02 апреля 2011

Вы пытались запустить свое приложение с помощью инструмента Zombies?
Скорее всего, ваша проблема связана с чрезмерным выпуском data, и инструменты должны это выяснить. Если всплывет сообщение «Обнаружено зомби», нажмите на адрес памяти и откройте панель расширенных сведений. (Вид → Расширенные сведения)

...