2011-04-17 30 views
1

如何捕捉NSString對象的第一行?捕獲NSString的第一行

我目前正在將整個NSString對象分配給我的textView的標題,但只想分配字符串的第一行。我當前的代碼是這樣的:

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

回答

7

你想

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

6

如果您定位的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

4

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

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

相關問題