Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTextView';s DeleteToBeginingofline:删除整个字符串_Objective C_Cocoa - Fatal编程技术网

Objective c NSTextView';s DeleteToBeginingofline:删除整个字符串

Objective c NSTextView';s DeleteToBeginingofline:删除整个字符串,objective-c,cocoa,Objective C,Cocoa,我有一个包含多行文本的NSTextView。调用-deleteToBeginingOffline:时,将删除整个字符串,而不是最后一行: NSTextView*textView=[[NSTextView alloc]initWithFrame:NSZeroRect]; textView.string=@“foo\nbar”; [textView DeleteToBeginingofline:nil]; NSAssert([textView.string IsequalString:@“foo\n

我有一个包含多行文本的NSTextView。调用
-deleteToBeginingOffline:
时,将删除整个字符串,而不是最后一行:

NSTextView*textView=[[NSTextView alloc]initWithFrame:NSZeroRect];
textView.string=@“foo\nbar”;
[textView DeleteToBeginingofline:nil];
NSAssert([textView.string IsequalString:@“foo\n”],@“”);//失败,字符串为“”。
//修改所选范围没有帮助。
textView.string=@“foo\nbar”;
textView.selectedRange=nsMakerRange(textView.string.length,0);
[textView DeleteToBeginingofline:nil];
NSAssert([textView.string IsequalString:@“foo\n”],@“”);//同上。
//使用\r\n不会更改任何内容。
textView.string=@“foo\r\nbar”;
[textView DeleteToBeginingofline:nil];
NSAssert([textView.string IsequalString:@“foo\r\n”],@“”);//同上。

视图在窗口中布局后,将按预期工作。但是我想在将视图添加到任何其他视图之前编辑字符串。如何实现此功能?

创建具有良好框架大小的文本视图

NSTextView*textView=[[NSTextView alloc]initWithFrame:NSMakeRect(0,0,1000,1000)];
textView.string=@“foo\nbar”;
[textView DeleteToBeginingofline:nil];
NSAssert([textView.string IsequalString:@“foo\n”],@“”);//好啊
//不要把框架弄得太小。
NSTextView*textView=[[NSTextView alloc]initWithFrame:NSMakeRect(0,0,1,1)];
textView.string=@“foo\nbar”;
[textView DeleteToBeginingofline:nil];
NSAssert([textView.string IsequalString:@“foo\n”],@“”);//失败,字符串为“foo\nba”。

你真的确定你理解“行”这个词吗?我很肯定,你没有。它不是“段落”。@Amin我认为一行是由一个换行符分隔的字符串的一部分,所以字符串“foo\nbar”由两行组成,“foo”和“bar”。删除起始行(从某处)最多应删除一行,而不是两行。那么,“段落”是什么意思呢?这不是一组由两个或多个连续的换行符分隔的“行”吗?然后我发现“行”实际上计算由于文本换行而插入的换行符。当文本视图太窄时,“foo\nbar”可以超过两行。字符串中由“\n”分隔的部分是段落(在我们的时代)。“行”是一个类型设置术语:它不是由“\n”分隔的,而是由一个段落不能在一行中布局这一事实创建的。一行是布局的一种现象,是屏幕上的一种现象。当你查看屏幕上的文本时,你会发现它们被分成了几段,每按一个[enter]键就有一段。一行\n->多行。如果您查看源代码,那么每个段落(回车)都是一行。这就是您必须水平滚动的原因。一\n->一行==一段。源代码段落没有包装。因此,您需要的是段落,而不是行(在文本视图中)。