我的代码在此函数崩溃(在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]]];
它可能与保留对象有关吗?
谢谢:)
答案 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的内存管理指南,但在阅读它之后仍然很容易失败。 : - )