【问题标题】:Strange receiver/selector errors from numberOfSectionsInTableView iPhone SDK reported from Flurry来自 Flurry 报告的 numberOfSectionsInTableView iPhone SDK 的奇怪接收器/选择器错误
【发布时间】:2011-02-20 21:03:40
【问题描述】:

我正在使用 Flurry 跟踪我的 iPhone 应用程序的统计信息,最近我看到了几个非常奇怪的错误。看似随机的对象正在接收“numberOfSectionsInTableView”消息,我不知道如何/为什么。该应用程序是使用 4.2.1 SDK 构建的,面向 iOS 4.0 设备。以下是一些示例的 sn-p:


NSInvalidArgumentException: -[NSCFString numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x4f3de10

NSInvalidArgumentException: -[__NSCFData numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x4f55bc0

NSInvalidArgumentException: -[NSPathStore2 numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x4f5ebc0

NSInvalidArgumentException: -[__NSCFType numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x2ac5f0

NSInvalidArgumentException: -[PLPhoto numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x2fbc30

NSInvalidArgumentException: -[PLPhotoLibrary numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x725ea20

我只是在我常用的 UITableView 委托方法中指定 numberOfSectionsInTableView,而不是直接调用它。我发现的唯一直接调用此方法的代码在 ASIHTTPRequest 库中:


    if (section == [self numberOfSectionsInTableView:aTableView]-1) {
        return 30;
    }
    return 0;

但这是在“ASIAuthenticationDialog.m”中,我没有将身份验证与 ASIHTTPRequest 一起使用。

以前有人见过这样的事情吗?我对任何和所有建议持开放态度,在这里很困惑,到目前为止无法重现。

谢谢。

【问题讨论】:

    标签: iphone objective-c uitableview crash unrecognized-selector


    【解决方案1】:

    听起来像是一个经典的过度释放问题。您已经过度释放了一个对象,而正在向其他一些随机对象发送消息。

    打开僵尸检测并再次尝试您的测试用例。

    【讨论】:

    • 您好,感谢您的回答!是否可以安全地假设过度释放发生在应用程序调用 numberOfSectionsInTableView 的“前后”? (比如在它之前或之后,等等?)或者它是否来自列为 numberOfSectionsInTableView 消息的接收者的任何对象?不幸的是,我打开了僵尸检测,但仍然无法重现。 :(
    • 无论如何,谢谢,这可能是问题所在,我猜想我只需要追踪它。
    【解决方案2】:

    我有同样的问题,我的问题是我在方法中本地创建了数据源,它运行到相同的内存问题

    - (void)setupDataSource {
      /* some code to create sections */
      TransactionDetailDataSource *dataSource = [[TransactionDetailDataSource alloc] initWithSections:sections];
    
      self.tableView.dataSource = dataSource;
      self.tableView.delegate = dataSource;
    
      [self.tableView reloadData];
    }
    

    ...所以我不得不创建新属性

    @property (nonatomic, strong) TransactionDetailDataSource *dataSource;
    

    并添加这一行

    self.dataSource = dataSource;
    

    在方法结束时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多