3

iOS 开发人员库中的字符串编程指南提到“行和段落分隔符”:NSParagraphSeparatorCharacterNSLineSeparatorCharacter. 但 Xcode 不接受它们(iOS7 是目标):

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

代码来自这个 SE 帖子

这是一个文档错误,它们仅在 OSX 上可用吗?如果是这样,有什么方法可以在iOS7 上使用 TextKit来实现同样的事情(同一段落中的新行)?

4

4 回答 4

2

自己定义就好

#define NSLineSeparatorCharacter 0x2028
unichar newLine = NSLineSeparatorCharacter;
[descriptionText appendString:[NSString stringWithCharacters:&newLine length:1]];
于 2014-05-13T10:15:00.903 回答
1

要将这些常量从 macOS 带到 iOS,可以定义:

let NSNewLineCharacter = "\u{000a}"
let NSLineSeparatorCharacter = "\u{2028}"
let NSParagraphSeparatorCharacter = "\u{2029}"
于 2018-03-02T15:24:38.377 回答
0

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

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

要在 iOS 中做到这一点,可以通过多种方式来表示换行符或分段符。历史上\n, \r,\r\n已被使用。

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

在此处查看更多详细信息:iOS 开发人员库:段落和换行符

于 2014-01-18T20:04:49.673 回答
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 代码兼容性。

于 2019-04-16T17:27:36.550 回答