Перейти к файлу и строке снаружи XCode 4.2 - PullRequest
4 голосов
/ 31 октября 2011

Для проекта NSLogger мы хотели бы реализовать функцию прямого перехода к XCode к строке в файле, который выдал запись журнала.Можно было бы ожидать, что это будет легко с использованием инструмента командной строки, например:

xed --line 100 ~/work/xyz/MainWindowController.m

Но это приводит к неожиданной ошибке:

2011-10-31 17:37:36.159 xed [53507: 707] Ошибка: Ошибка Domain = NSOSStatusErrorDomain Code = -1728 «Операция не может быть завершена. (Ошибка OSStatus -1728.)» (Например,: спецификатор запросил 3-й, но есть только 2.По сути, это указывает на ошибку разрешения во время выполнения.) UserInfo = 0x40043dc20 {ErrorNumber = -1728, ErrorOffendingObject =}

Другая идея состоит в том, чтобы использовать AppleScript для указания XCode на выполнение необходимых шагов, но яне удалось найти рабочее решение.

Поэтому любое решение для достижения желаемого эффекта было бы очень полезно.

Ссылка на проблему NSLogger на GitHub: https://github.com/fpillet/NSLogger/issues/30

1 Ответ

0 голосов
/ 02 ноября 2011

Инструмент xed работает нормально:

xed --line 100 /Users/Anne/Desktop/Test/TestAppDelegate.m

Error

например,: спецификатор запрашивал 3-й, но есть только 2

Вышеприведенная ошибка просто указывает на то, что запрошенная строка находится вне диапазона.

Решение

Проверьте, действительно ли номер строки существует перед выполнением xed.

Кратко написанный пример

// Define file and line number
NSString *filePath = @"/Users/Anne/Desktop/Test/TestAppDelegate.m"; 
int theLine = 100;

// Count lines in file
NSString *fileContent = [[NSString alloc] initWithContentsOfFile: filePath];
unsigned numberOfLines, index, stringLength = [fileContent length];
for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++)
    index = NSMaxRange([fileContent lineRangeForRange:NSMakeRange(index, 0)]);

// The requested line does not exist
if (theLine > numberOfLines) {
    NSLog(@"Error: The requested line is out of range.");

// The requested line exists
} else {

    // Run xed through AppleScript or NSTask
    NSString *theSource = [NSString stringWithFormat: @"do shell script \"xed --line %d \" & quoted form of \"%@\"", theLine, filePath];        
    NSAppleScript *theScript = [[NSAppleScript alloc] initWithSource:theSource];
    [theScript executeAndReturnError:nil];

}

Примечание

Убедитесь, что правильно посчитали количество строк: Подсчет строк текста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...