为什么会崩溃:stringByAppendingFormat

时间:2010-06-01 16:26:22

标签: iphone string crash

我的代码在此函数崩溃(在stringByAppendingFormat:错误objc_msgSend() selector name: stringByAppendingFormat)。

这就是那条线:

    // imagesPath = ...iPhone Simulator/4.0/Applications/NUMBERS/Documents/images
UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath stringByAppendingFormat:@"/%d.png", [[self.postsArrayID objectAtIndex:row] intValue]]];

它可能与保留对象有关吗?

谢谢:)

3 个答案:

答案 0 :(得分:1)

通常objc_msgSend()中的崩溃意味着没有为该对象指定传递给对象的消息(在这种情况下,stringByAppendingFormat)。 Quick googling显示stringByAppendingFormat的许多首页都过时了,推断API可能已被弃用而不赞成其他内容。

作为一种解决方法,似乎+[NSString stringWithFormat:]将是您用例的可行替代方案。

答案 1 :(得分:1)

为什么不使用stringByAppendingPathComponent:?肯定imagesPath不是........../NUMBERS/images?它不是................/<random ID>/images吗?

答案 2 :(得分:1)

> rootPath =
> [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
> NSUserDomainMask, YES)
> objectAtIndex:0]; imagesPath =
> [rootPath
> stringByAppendingPathComponent:@"/images/"];
  

哈!设置属性和设置   使用self.imagesPath = ...修复的值   它。 Obj-c很难理解   有时...

用于设置获取路径的方法是自动释放的,因此当您稍后尝试访问它们时,它们已经死亡。使用self.imagesPath属性将保留数据(您将其指定为(非原子,保留) - 因此它将保持不变直到您释放它(或使用属性访问器指定任何其他内容self.imagesPath = ....;

强烈建议使用Apple的内存管理指南,但在阅读它之后仍然很容易失败。 : - )