4

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。)」 (例: 指定子が要求した基本的に、これは実行時解決エラーを示します。) UserInfo=0x40043dc20 {ErrorNumber=-1728, ErrorOffendingObject=}

もう 1 つのアイデアは、AppleScript を使用して XCode に目的の手順を実行するよう指示することですが、有効な解決策を見つけることができませんでした。

したがって、望ましい効果を達成するための解決策は非常に高く評価されます。

GitHub の NSLogger 問題への参照: https://github.com/fpillet/NSLogger/issues/30

4

1 に答える 1

0

xedツールは正常に動作しているようです:

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

エラー

例: 指定子は 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];

}

ノート

行数を正しく数えることを確認してください: テキストの行数を数える

于 2011-11-01T22:22:56.773 に答える