【问题标题】:Error: "-[NSCFString sizeWithTextStyle:]: unrecognized selector" in IPhone SDK错误:“-[NSCFString sizeWithTextStyle:]: 无法识别的选择器”在 iPhone SDK 中
【发布时间】:2011-02-18 10:18:59
【问题描述】:

我在运行我的应用程序时收到以下错误。

'-[NSCFString sizeWithTextStyle:]:无法识别的选择器

我没有在整个项目中使用 sizeWithTextStyle。

那么可能出了什么问题?

我在下面的return pos; 语句中遇到错误

代码:

(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
     UIView *pos = [[UIView alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,35.0)];
     return pos;
}

控制台出错:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString sizeWithTextStyle:]: unrecognized selector sent to instance 0x7044b50'

由于将整个崩溃日志放在这里时出现缩进问题,我将崩溃日志的屏幕截图放在这里

【问题讨论】:

  • 很难说没有更多的代码。您能否提供您的应用崩溃的代码行?
  • @Philipp Jaquet:我已经编辑了我的问题并添加了我的代码。我尝试调试代码,发现应用程序因 SIGNAL ABORT 语句而崩溃

标签: iphone objective-c cocoa-touch ios4


【解决方案1】:

我认为,问题出在其他地方,而不是这行代码。对象无法保留自身。贴出你使用sizeWithTextStyle方法的代码

您的链接设置中有 -all_load 标志吗?

这个问题经常出现。 您需要将 -all_load 和 -ObjC 添加到您的应用程序链接标志中。

*编辑:*

在线似乎发生崩溃:

 CGSize textSize = [self.text sizeWithTextStyle:textStyle];
 in class: CPTextLayer method: sizeToFit

 which is called from within class CPTextLayer method initWithText:
-(id)initWithText:(NSString *)newText style:(CPTextStyle *)newStyle
....
[self sizeToFit];


**try to set with iOS 4 and not with 3.1.3 **

【讨论】:

  • 我已经使用过 -ObjC 并且我还尝试放置 -all_load 标志,然后清理所有并构建并运行,但它仍然在同一个地方崩溃。可以做什么?
  • 我没有在我的代码中的任何地方使用这种方法sizeWithTextStyle。你能建议它在哪里被引用吗?
  • -sizeWithTextStyle:是Core Plot添加的NSString类方法。我同意您可能有链接器错误。
  • 不错,您对此有技术解释吗?
【解决方案2】:

当您遇到内存管理问题(选择器被发送到错误的实例是内存管理问题的一种症状)时,您可以做很多事情:

  1. 重新阅读 Cocoa memory management rules 并确保您关注它们。
  2. 运行static analyser。这通常会发现您忽略了内存管理规则的地方。
  3. 尝试使用NSZombieEnabled 了解您是否[以及何时]向未分配的实例发送消息。

【讨论】:

    【解决方案3】:

    我也遇到同样的错误,但现在已经解决了。

    要做简单的事情,设置Other linker flag的值。

    下面我已经提到了步骤。

    项目名称-构建设置-其他链接器标志(使用搜索栏搜索)-“-ObjC”

    【讨论】:

    • 你能贴这张照片吗?因为我发现只有调试和发布,其他链接器标志中没有其他内容
    【解决方案4】:

    您应该更改代码以使用如下指针:

    UIView *pos = [[UIView alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,35.0)]; 
         return pos;
    

    注意星号!

    当然还有分配语句末尾的;

    【讨论】:

    • 我试过了,但它仍然崩溃并出现同样的错误。可以做什么?
    • 您是否尝试清理您的项目并重新构建?也可以放崩溃日志吗?我认为它不会在这条特定线上崩溃......
    • 是的,纳瓦卡蒙。只是我在复制代码时错过了分号。我也试过清洁,但还是不行。
    • 我在我的问题中添加了控制台错误消息。
    • 你能发布你的整个表格视图委托源吗?可能你发布了一些自动发布的东西,比如从主包创建一个视图,将它分配到某个地方并发布等等?这可能会导致内存损坏并在任何地方崩溃……您发布的行不会导致崩溃。内存损坏,发生在您的表视图委托的功能之一中导致它。请发布更多代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多