【问题标题】:"message sent to deallocated object" after passing an instance to another View Controller将实例传递给另一个视图控制器后“发送到已释放对象的消息”
【发布时间】:2011-09-14 09:01:54
【问题描述】:

我有一个 NSMutableArray,其中包含我的模型类的实例,称为 PropertyData(只有属性,没有方法)。在我的应用程序中,有一个“在地图上查看”按钮,当点击该按钮时,在地图视图控制器的属性中设置此 NSMutableArray,然后将其视图推送到导航顶部。地图视图控制器成功接收到这个数组(使用 NSLOG 我打印出地图视图控制器中接收到的总项目)但是当循环通过它时我得到了这个错误:

[PropertyData lat] message sent to deallocated instance

知道为什么吗?

感谢您的帮助,

斯蒂芬

附注:

在第一个视图中,控制器数据存储到名为 rqst_entries 的 ivar(在接口中声明为 NSMutableArray 属性然后合成),下面是它如何切换到地图视图:

-(void)show_map 
{
   PropertiesMapViewController *pMapView = [[PropertiesMapViewController alloc] init];
   pMapView.entries = self.rqst_entries; // pMapView.entries is alsi a NSMutableArray
   [self.navigationController pushViewController:pMapView animated:YES];
}

这是崩溃的代码:

if(self.entries != nil)
{
   NSLog(@"received items count=%d",[self.entries count]);
   NSNumberFormater *nf = [[NSNumberFormater alloc] init];
   for(PropertyData *property_data in self.entries)
   {
     if(property_data==nil) continue;
     [nf setNumberStyle:NSNumberFormatterDecimalStyle];
     // CRASH OCCURS HERE:
     NSNumber *lat = [nf numberFromString:property_data.lat]; 
   }

}

【问题讨论】:

  • 在应用程序崩溃的地方发布您的代码
  • 纯粹的内存泄漏问题。你能发布一些代码吗?
  • 您能否展示一些代码 - 否则很难猜出问题出在哪里。
  • 您为 Map View Controller 中的可变数组声明了什么属性类型?由于您是从其他视图设置它,您是否已从先前视图中零售接收到的数组。

标签: iphone ios ios4 uiviewcontroller uinavigationcontroller


【解决方案1】:

您应该确保PropertiesMapViewControllerentries 属性具有retain 属性:

@property (nonatomic, retain) NSMutableArray * entries;

【讨论】:

  • 我这样声明:@property (nonatomic,retain) NSMutableArray *entries;和你建议的一样
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多