对于NSLogger项目,我们希望实现该功能,以直接跳回XCode到发布日志条目的文件中的行。可以期望使用这样的命令行工具会很容易:
xed --line 100 ~/work/xyz/MainWindowController.m
但这会导致意外错误:
2011-10-31 17:37:36.159 xed [53507:707]错误:错误
Domain = NSOSStatusErrorDomain代码= -1728“该操作无法
完成。 (OSStatus错误-1728。)”(例如:说明者要求提供
第三,但只有2。基本上,这表示运行时间
解析错误。 )UserInfo = 0x40043dc20 {ErrorNumber = -1728,
ErrorOffendingObject =}
另一个想法是使用AppleScript告诉XCode执行所需的步骤,但是我找不到有效的解决方案。
因此,任何达到期望效果的解决方案将不胜感激。
引用GitHub上的NSLogger问题:https://github.com/fpillet/NSLogger/issues/30
最佳答案
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];
}
注意
确保正确计算行数:
Counting Lines of Text