捕获NSString的第一行

问题描述:

如何捕捉NSString对象的第一行?捕获NSString的第一行

我目前正在将整个NSString对象分配给我的textView的标题,但只想分配字符串的第一行。我当前的代码是这样的:

self.textView.text = [[managedObject valueForKey:@"taskText"] description]; 

你想

self.textView.text = [[[[managedObject valueForKey: @"taskText"] description] componentsSeparatedByString: @"\n"] objectAtIndex:0]; 

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

+3

由于'-componentsSeparatedByString:'返回'NSArray'实例,则可以不使用C-阵列'[]'语法。您需要发送'-objectAtIndex:'代替。 – 2011-04-17 23:34:56

+6

另外,由于换行符有多种表示形式,所以应该在'+ [NSCharacterSet newlineCharacterSet]'中使用'-componentsSeparatedByCharactersInSet:'。 – 2011-04-17 23:37:24

+0

如果有10,000行,而您只想剥离第一行而不解析其他9,999行? – wcochran 2017-06-26 15:33:19

如果您定位的iOS 4.0及更高版本,可以使用-[NSString enumerateLinesUsingBlock:]

__block NSString *firstLine = nil; 
NSString *wholeText = [[managedObject valueForKey:@"taskText"] description]; 
[wholeText enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { 
    firstLine = [[line retain] autorelease]; 
    *stop = YES; 
}]; 

self.textView.text = firstLine; 
+0

有什么解释为什么分配给firstLine时,小保留/自动释放舞蹈是必要的?我认为这是由于块池(?)被刷新,但还没有读取任何实际描述的内容。谢谢! – 2011-08-24 01:00:17

另一种方法可能是最有效和直接的:

NSString* str = [[managedObject valueForKey:@"taskText"] description]; self.textView.text = [str substringWithRange:[str lineRangeForRange:NSMakeRange(0, 0)]];