iOS中的NSLineSeparatorCharacter?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中的NSLineSeparatorCharacter?相关的知识,希望对你有一定的参考价值。

String Programming Guide in the iOS Developer Library提到“线和段落分隔符”:NSParagraphSeparatorCharacterNSLineSeparatorCharacter。但Xcode不接受它们(ios7是目标):

NSLog(@"This is%Con two lines…", (unichar)NSLineSeparatorCharacter);

Code is from this SE post

这是文档错误,它们只能在OSX上使用吗?如果是这样,有没有办法在iOS7上使用TextKit实现同样的事情(同一段落中的新行)?

答案

你自己定义一下,

#define NSLineSeparatorCharacter 0x2028
unichar newLine = NSLineSeparatorCharacter;
[descriptionText appendString:[NSString stringWithCharacters:&newLine length:1]];
另一答案

这在NSText.h中定义。它为管理文本的对象声明了最通用的编程接口。

这仅适用于OS X,而不适用于iOS。所以你不能在iOS中使用这些常量。

要在iOS中执行此操作,可以通过多种方式表示行或段落。历史上, , , 已被使用。

Unicode定义了一个明确的段落分隔符,U + 2029(Cocoa为其提供常量NSParagraphSeparatorCharacter)和一个明确的行分隔符U + 2028(Cocoa为其提供常量NSLineSeparatorCharacter)。

在这里查看更多详情:iOS Developer Library: Paragraphs and Line Breaks

另一答案

要将这些常量从macOS引入iOS,可以定义:

let NSNewLineCharacter = "u{000a}"
let NSLineSeparatorCharacter = "u{2028}"
let NSParagraphSeparatorCharacter = "u{2029}"
另一答案

这是一个代码示例,可以满足您的需求。我的情况是这样的:我想将日志消息添加到日志文件中,其中每个日志行都由 终止(这就是我的记录器的工作方式)。但是 - 我有时需要在日志中包含多行消息,因此它们不能包含 n - 或者它们将破坏日志文件格式。所以...在这里,我用“NSLineSeparatorCharacter”替换所有“newlines”:

NSString *logMessage // multi-paragraph string message containing all kinds of line and paragraph breaks.
NSString *singleParagraphMultiLineMessage = 
   [[logMessage componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] 
   componentsJoinedByString:@"u2028"];

注意:如果您尝试通过其description显示此字符串,它会将NSLineSeparator更改回

例如:如果您尝试使用:

NSString *test = [NSString stringWithFormat:"%@", singleParagraphMultiLineMessage];

NSLog(@“%@”,singleParagraphMultiLineMessage);

甚至调试器中的po singleParagraphMultiLineMessage -

结果将不再包含NSLineSeparatorCharacter。只有将它导出到NSData并保存到文件 - 或者以UTF8提取其内容 - 您才会看到它工作正常。我花了一段时间才明白为什么会这样。

为了使答案完整,NSLineSeparatorCharacter在Appkit / NSText.h中定义,是以下枚举器的一部分,如下所示:

/* 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代码兼容性。

以上是关于iOS中的NSLineSeparatorCharacter?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发:iOS中的多控制器管理

IOS5中的Safari不兼容Javascript中的Date问题

Java中的IO流

iOS6中的iOS行车路线

java中的IO 的示例

iOS中的NSLineSeparatorCharacter?