【问题标题】:UITextView crash when clicking on a URL单击 URL 时 UITextView 崩溃
【发布时间】:2014-04-26 13:07:12
【问题描述】:

我的代码中有以下几行用于向 UITextView 添加可点击的 url。商家网站是我的 UITextView。

self.merchantwebsite.attributedText = [[NSAttributedString alloc] initWithString:@"http://www.crossfit.com" attributes:@{NSLinkAttributeName: @"http://www.crossfit.com"}];
self.merchantwebsite.userInteractionEnabled = YES;

当我点击 UITextView 时,应用程序崩溃并显示日志

2014-03-19 16:13:43.051 BTLE[27103:60b] -[__NSCFConstantString scheme]: unrecognized selector sent to instance 0x1a4404

谁能告诉我我做错了什么。

谢谢!

【问题讨论】:

  • 如果您不使用链接器标志-all_load和-ObjC,请尝试在我们的项目中添加它们

标签: ios objective-c nsstring uitextview


【解决方案1】:

当你告诉 UITextView 要显示什么时,只需键入链接,然后在从 .storyboard 页面中选择 UITextView 时,在右侧的设置中打开链接识别。

您实际上不需要任何代码,您所需要的只是:

merchantwebsite.text = @"http://www.crossfit.com";

【讨论】:

  • 我使用属性文本的原因是让文本看起来像一个超链接。
  • 然后更改字体大小和颜色(可能添加下划线)使其看起来像一个链接
【解决方案2】:

您的代码显然期望 URL 是 NSURL。但是,很简单,一个 NSString 不是一个 NSURL。试试这样:

self.tv.attributedText = 
    [[NSAttributedString alloc] 
        initWithString:@"http://www.crossfit.com" 
        attributes:
            @{NSLinkAttributeName: [NSURL URLWithString:@"http://www.crossfit.com"]}];

【讨论】:

  • 同意NSString 不是NSURL。但是文档说:The value of this attribute is and NSURL object (preferred) or an NSString object. 所以NSString 应该可以按预期工作。 (如果我测试它,我无法使用带有 iOS 7.0 和 iOS 7.1 模拟器的 NSString 重现崩溃)
  • 没错@Emmanuel,但崩溃是由 OP 未向我们显示的其他代码引起的。这就是为什么我说“你显然有代码”......可能是他的文本视图的委托导致了崩溃。
  • 我现在知道这是一个老问题了,但似乎不管苹果说属性可以是字符串还是 NSURL,UITextViewDelegate 方法都需要一个 NSURL,否则你会得到无法识别的选择器崩溃
【解决方案3】:

如下修改你的代码:

 NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"http://www.crossfit.com" attributes:@{NSLinkAttributeName: @"http://www.crossfit.com"}];
[self.merchantwebsite setAttributedText:string];

【讨论】:

    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多