上面的文章是论坛上一位网友发现的问题。最近,我也在firebase上发现了类似的崩溃堆栈。我猜也是这个原因造成的,可能是数据越界的问题。你有好的解决办法吗?
Firebase 使堆栈崩溃:
Fatal Exception: NSInternalInconsistencyException
Invalid parameter not satisfying: pos
0
CoreFoundation
__exceptionPreprocess
1
libobjc.A.dylib
objc_exception_throw
2
Foundation
_userInfoForFileAndLine
3
UIKitCore
-[_UITextKitTextPosition compare:]
4
UIKitCore
-[UITextInputController comparePosition:toPosition:]
5
UIKitCore
-[UITextView comparePosition:toPosition:]
6
UIKitCore
-[UITextPasteController _clampRange:]
7
UIKitCore
__87-[UITextPasteController _performPasteOfAttributedString:toRange:forSession:completion:]_block_invoke
8
UIKitCore
__87-[UITextPasteController _performPasteOfAttributedString:toRange:forSession:completion:]_block_invoke.177
9
UIKitCore
-[UITextInputController _pasteAttributedString:toRange:completion:]
10
UIKitCore
-[UITextPasteController _performPasteOfAttributedString:toRange:forSession:completion:]
11
UIKitCore
__49-[UITextPasteController _executePasteForSession:]_block_invoke
12
libdispatch.dylib
_dispatch_call_block_and_release
13
libdispatch.dylib
_dispatch_client_callout
14
libdispatch.dylib
_dispatch_main_queue_callback_4CF
15
CoreFoundation
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
16
CoreFoundation
__CFRunLoopRun
17
CoreFoundation
CFRunLoopRunSpecific
18
GraphicsServices
GSEventRunModal
19
UIKitCore …iOS 7允许使用HTML文件或数据初始化NSAttributedString.我想使用此功能,以便更容易在"关于"应用程序文本中插入链接.
为此,我使用以下代码初始化NSAttributedString:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"test.html" withExtension:nil];
NSError *error = nil;
NSDictionary *options = nil;
NSDictionary *attributes = nil;
_textView.attributedText = [[NSAttributedString alloc] initWithFileURL:url options:options documentAttributes:&attributes error:&error];
和包含以下内容的文件:
<html><body>
<p>This is a <a href=\"http://www.stackoverflow.com\">test link</a>. It leads to StackOverflow.<p>
</body></html>
更新
上面的HTML仍然有试图在代码中使用它作为NSString的转义标记.删除逃脱使它工作得很好.还回答了我自己的问题.
结束更新
这样可以正常工作,并提供一个字符串,其中url格式正确且可单击.单击该链接将调用UITextView的委托-textView:shouldInteractWithURL:inRange:方法.但是,检查URL参数显示URL实际上具有以下绝对字符串:
file:///%22http://www.google.com/%22
这显然没有打开相应的网页.我没有发现NSAttributedText上的文档足够清楚,以确定为什么会发生这种情况.
任何人都知道如何初始化NSAttributedString以生成适当的URL?
我一直在为iOS 7重写我的应用程序.它现在使用新的TextKit API.我差不多完成了,但是还有一个问题让我头疼,因为我已经开始进行过渡了.
问题:当我在UITextView中输入文本时,视图会向上滚动以隐藏光标.很难确定模式,但它似乎发生在我删除一行后,下面的文字必须向上移动.但是只有第二次我删除了一行而且只删除了文档中的某些行(通常是只有换行符但不总是......的行)
我尝试在stackoverflow上使用这些解决方案:
插入每个新行后UITextView继续滚动,因此行不可见(iPhone OS)
还有许多其他问题,当在UITextView中使用UITableView时,滚动无法正常工作.我认为我没有表格视图.
我想指出我已经将UITextView子类化,并发现它绝对是iOS 7调用,不仅向上滚动视图.而且,更奇怪的是,当您按下后退按钮(从UITextView中删除一个字符)时,它会发送两条消息textViewDidChangeSelection:.发生问题时,这是调用堆栈.(当问题没有发生时,我仍然得到委托的两个调用textViewDidChangeSelection:......这似乎是正常的):
textViewDidChangeSelection:包含要删除的字符的位置,长度为1.(即1050,1)textViewDidChangeSelection:再次调用UITextView委托并包含相同的位置但长度为零.(即1050,0)UITextView.scrollRangeToVisible:w/FIRST调用的范围{1050,1}.这对我来说毫无意义.我知道这是在内部调用的,而不是来自我的任何代码,因为这个内部API被调用,_ensureselectionvisible无需追溯到我可能用来调用滚动事件的函数.据推测,前两个调用只是选择字符,然后在内部调用deleteBackwards.那讲得通.不过,我之后会失明.我不知道为什么它会滚动或为什么它会调用scrollRangeToVisible:WRONG范围.
通过在用户编辑文本时UITextView.scrollRangeToVisible:返回w/o调用[super scrollRangeToVisible],我已经能够通过覆盖来缓解这个问题.我这样做是通过覆盖一些scrollview委托调用并设置一个标志,表示不能进行滚动.对我来说,这是一个巨大的UGLY黑客,在某些情况下仍然会出现问题 - 比如当我在第一次编辑时进入视图,有时当滚动视图停止减速时.
简而言之,正在发生的是滚动事件发生(可能是由于前一行向上移动)而iOS由于某种原因认为光标不在视图中.更令人好奇的是,即使提供了错误的范围,它确实提供了正确的位置,然后将其滚动到视图中的错误位置.更令人好奇的是,它只发生在某些条件下,而只发生在条件发生的第二个实例中.我唯一能想到的是,在删除文本后,UITextView的高度无法正确计算,并且它认为文本位于与实际位置不同的位置.
提前致谢!
更新:
我设置了我之前谈到过的标志scrollViewDidScroll:,它不会阻止其他情况下的跳跃.但是,仍然存在向后删除文本仍会跳转到屏幕的情况.在视图仍然跳跃的情况下,更奇怪的是我发现我[super scrollRangeToVisible]无法被调用!因此,在ADDITION内部发生了一些事情,导致视图滚动.
更新:
它似乎在613点到670点之间跳跃.我不确定是什么导致了分数差异.它跳跃的行数也有所不同.我怀疑条件之间必须有类似的东西.此外,当scrollViewDidScroll:被调用时,我验证了textView.selectedRange.location此调用和委托textViewDidChangeSelection:调用之间的相同.
当我使用外接键盘时,按下退格键("后退删除")时,我UITextView发出的shouldChangeTextInRange信息很好,但是如果我按下删除("前进删除"),那么根本不会调用该方法,尽管视图的文本正在改变正如所料.如果它很重要,我正在使用Swift和最新的iOS模拟器.
如果这是预期的行为,有人可以指向我解释它的文档吗?
更重要的是,有解决方法吗?
编辑:提交rdar:// 18909378.我在使用cmd + backspace和opt + backspace时也发现了相同的行为.很烦人!
如果我像这样将图像添加到UITextView中:
NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = image;
NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
[myString appendAttributedString:attrStringWithImage];
self.inputTextView.attributedText = myString;
之后,我如何才能通过用户单击键盘上的“后退”按钮检测到图像已被删除?
我会使用以下内容吗?
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
如果是这样,怎么办?
我正在使用 UITextView 并实现委托功能
var count = 0
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    print(text)
    count += 1
    print(count)
    return true
}
样本
当我从键盘选择预测文本时,shouldChangeTextInRange 委托调用两次。
我遇到了一个问题,当按住键盘上的Delete键时,iOS给我的UITextViewDelegate提供了不正确的信息。
当用户HOLDS在UITextView中的删除键在iPad中的UITextView将开始删除整个单词,而不是它被按下单个字符长(注:这不会发生在模拟器)。
发生这种情况时,UITextView委托方法:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
被调用时,其范围包括正确的光标位置,但长度为1。这是不正确的,因为UITextView现在正在删除整个单词,而不是单个字母。例如,以下代码将只打印一个空格。
[textView substringWithRange:range]
string contains " "
尽管UITextView删除了整个单词。替换文本正确指定为空字符串。是否有人知道解决此问题的方法或解决方法?
我在UITextFieldDelegate上遇到了问题,任何人都可以帮助我,我将非常感激.有一个UITextView,我实现了它的委托.通常所有委托方法都称为非常好.但在这种情况下:
我需要调用textViewShouldBeginEditing来处理一些UI更改.谁知道怎么解决?非常感谢!
测试项目:我创建了一个简单的测试项目,它将NSLog调用方法,你可以快速测试我的情况,谢谢!源代码在这里:http://goo.gl/tGQS5
当我点击它时,我希望文本字段内的文本突出显示.
我希望有人点击数字键盘时删除原始文本.我尝试使用clearButtonMode,但由于我的文本字段大小非常小,十字图标完全占据文本字段.
知道怎么做到这一点?
我有UITextView一个UIView.当viewLoad,我有一个UIPickerView内UIAlertView有"OK"按钮.当我从选择器中选择任何值并单击"确定"时,我需要激活UITextView.
为此我写了[<myTextView> becomeFirstResponder];委托方法UITextView.只要此方法执行它textViewShouldBeginEditing,就会调用委托方法.这个方法正确执行,我在这里返回TRUE,但之后执行返回到该行[<myTextView> becomeFirstResponder];,然后应用程序崩溃.
 UIAlertView委托方法如下:
- (void)customIOS7dialogButtonTouchUpInside: (CustomIOS7AlertView *)alertView clickedButtonAtIndex: (NSInteger)buttonIndex
{
    NSLog(@"Button at position %d is clicked on alertView %d.", (int)buttonIndex, (int)[alertView tag]);
    [alertView close];
    [self.updateTV becomeFirstResponder];
}
在上面的代码应用程序崩溃[self.updateTV becomeFirstResponder];
 崩溃日志显示如下:
2016-12-09 11:47:53.069049 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.069451 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.070530 oGoing[250:11235] self.viewControllers lastObject ==<OGAddUpdateViewController: 0x17bebe00>
2016-12-09 11:47:53.070970 oGoing[250:11235] …ios ×10
uitextview ×8
objective-c ×3
cocoa-touch ×2
iphone ×2
ios15 ×1
ios7 ×1
swift ×1
uikit ×1
uitextfield ×1
xcode ×1