gpt4 book ai didi

objective-c - 在 NSDocument 中设置行终止符字符串?

转载 作者:行者123 更新时间:2023-12-03 17:16:39 25 4
gpt4 key购买 nike

(经过进一步研究,这个问题已根据 NSTextView 的问题重写)

更新:您可以在此处下载一个显示问题的非常基本的项目:

http://w3style.co.uk/~d11wtq/DocumentApp.tar.gz

(在您保存的文件上执行 grep -c "\r"file.txt 以获取发生 \r 的行数...重复 \n)。

我已经意识到由 NSDocument 创建的所有文件都有 \r 是行结尾,而不是标准的 \n,即使 NSData 我的文档子类返回不包含 \r,它只包含 \n。有办法配置吗?

我认为 Mac 现在使用了 UNIX 行结尾,所以 AppKit 仍然使用过时的 Mac 结尾似乎很奇怪。奇怪的是,NSDocument 请求 NSData,然后通过转换行结尾来不友善地破坏 NSData

切换到 \r 是在生成 NSData 之后发生的,因此 NSDocument 本身正在对字节:

 const char *bytes = [data bytes];
int i, len;
for (i = 0, len = [data length]; i < len; ++i) {
NSLog(@"byte %d = %02x", i, bytes[i]);
}

输出(注意 0a 是 \n 的十六进制值):

> 2010-12-17 12:45:59.076
> MojiBaker[74929:a0f] byte 0 = 66
> 2010-12-17 12:45:59.076
> MojiBaker[74929:a0f] byte 1 = 6f
> 2010-12-17 12:45:59.076
> MojiBaker[74929:a0f] byte 2 = 6f
> 2010-12-17 12:45:59.077
> MojiBaker[74929:a0f] byte 3 = 0a
> 2010-12-17 12:45:59.077
> MojiBaker[74929:a0f] byte 4 = 62
> 2010-12-17 12:45:59.077
> MojiBaker[74929:a0f] byte 5 = 61
> 2010-12-17 12:45:59.077
> MojiBaker[74929:a0f] byte 6 = 72
> 2010-12-17 12:45:59.077
> MojiBaker[74929:a0f] byte 7 = 0a

如果NSDocument要请求NSData,那么它应该尊重它而不是修改它。

以下是我的文档中的方法:-dataOfType:error: 方法的完整代码:

    -(NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
NSString *string = [textView string];

// DEBUG CODE...
NSArray *unixLines = [string componentsSeparatedByString:@"\n"];
NSArray *windowsLines = [string componentsSeparatedByString:@"\r\n"];
NSArray *macLines = [string componentsSeparatedByString:@"\r"];

NSLog(@"TextView has %d LF, %d CRLF, %d CR", [unixLines count] - 1, [windowsLines count] - 1, [macLines count] - 1);

NSData *data = [NSData dataWithBytes:[string cStringUsingEncoding:NSUTF8StringEncoding]
length:[string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];

const char *bytes = [data bytes];
int i, len;
for (i = 0, len = [data length]; i < len; ++i) {
NSLog(@"byte %d = %02x", i, bytes[i]);
}

if (data != nil) {
[textView breakUndoCoalescing];
}

return data;
}

最佳答案

NSDocument 不关心行终止;它是一个半抽象类,旨在进行子类化。它本身对文件格式没有任何影响。

这是 NSDocument 子类的特定实现 - 一个恰好读取和写入纯文本的子类 - 将关心行终止字符。

关于objective-c - 在 NSDocument 中设置行终止符字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com