String Programming Guide in the iOS Developer Library提及“行和段落分隔符”:NSParagraphSeparatorCharacter
和NSLineSeparatorCharacter
。但Xcode不接受它们(iOS7是目标):
NSLog(@"This is%Con two lines…", (unichar)NSLineSeparatorCharacter);
这是文档错误吗?它们仅适用于OSX?如果是这样,有没有办法在iOS7上使用TextKit实现同样的事情(相同段落中的新行)?
答案 0 :(得分:2)
自己定义,
#define NSLineSeparatorCharacter 0x2028
unichar newLine = NSLineSeparatorCharacter;
[descriptionText appendString:[NSString stringWithCharacters:&newLine length:1]];
答案 1 :(得分:0)
这在NSText.h
中定义。它为管理文本的对象声明了最通用的编程接口。
这仅适用于OS X,而不适用于iOS。所以你不能在iOS中使用这些常量。
要在iOS中执行此操作,可以通过多种方式表示行或段落分隔符。历史上已使用\n, \r,
和\r\n
。
Unicode定义了一个明确的段落分隔符,U + 2029(Cocoa为其提供常量NSParagraphSeparatorCharacter
),以及一个明确的行分隔符U + 2028(Cocoa为其提供常量NSLineSeparatorCharacter)。
答案 2 :(得分:0)
要将这些常量从macOS引入iOS,可以定义:
let NSNewLineCharacter = "\u{000a}"
let NSLineSeparatorCharacter = "\u{2028}"
let NSParagraphSeparatorCharacter = "\u{2029}"
答案 3 :(得分:0)
这是一个代码示例,可以满足您的需求。我的情况是这样的:我想在日志文件中添加日志消息,其中每个日志行都以\n
终止(这就是我的记录器的工作方式)。但是-有时我需要在日志中包含多行消息,因此它们不能包含\ n-否则它们会破坏日志文件格式。所以...在这里,我用“ NSLineSeparatorCharacter”替换所有“换行符”:
NSString *logMessage // multi-paragraph string message containing all kinds of line and paragraph breaks.
NSString *singleParagraphMultiLineMessage =
[[logMessage componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]
componentsJoinedByString:@"\u2028"];
注意:如果您尝试通过其description
显示此字符串,则会将NSLineSeparator更改回\n
例如:如果您尝试使用:
NSString *test = [NSString stringWithFormat:"%@", singleParagraphMultiLineMessage];
NSLog(@“%@”,singleParagraphMultiLineMessage);
甚至调试器中的po singleParagraphMultiLineMessage
-
结果将不再包含NSLineSeparatorCharacter。仅当将其导出到NSData并保存到文件-或将其内容提取到 UTF8 中时,您才会看到它可以正常工作。我花了一段时间才明白为什么会这样。
为使答案完整,在 Appkit / NSText.h 中定义了NSLineSeparatorCharacter,它是以下枚举器的一部分,如下所示:
/* Various important Unicode code points */
enum {
NSEnterCharacter = 0x0003,
NSBackspaceCharacter = 0x0008,
NSTabCharacter = 0x0009,
NSNewlineCharacter = 0x000a,
NSFormFeedCharacter = 0x000c,
NSCarriageReturnCharacter = 0x000d,
NSBackTabCharacter = 0x0019,
NSDeleteCharacter = 0x007f,
NSLineSeparatorCharacter = 0x2028, // <-- here it is.
NSParagraphSeparatorCharacter = 0x2029
};
但不是 UIKit / NSText.h 中的版本,与MacOS相比,该版本非常空白。我不知道苹果为什么如此严重地忽视了iOS开发人员。也许他们不喜欢NSText,并希望开发人员放弃使用它?仍然-欢迎您复制该枚举,并将其粘贴到您的代码中,从而实现MacOS / iOS代码兼容性。