UIImageView * one = [[UIImageView alloc] initWithImage:[[UIImage alloc] initWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“ball1.png”]]];
UIImageView *two = [[UIImageView alloc]initWithImage:[[UIImage alloc] initWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ball2.png"]]] ;
UIImageView *three = [[UIImageView alloc]initWithImage:[[UIImage alloc] initWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ball3.png"]]] ;
arrayBalls = [[NSArray alloc]initWithObjects:one,two,three,nil];
我使用上面的代码在UIPickerView中显示图像。但是在执行此代码时应用程序崩溃了。
任何人都请帮忙。
答案 0 :(得分:0)
你得到了什么错误,看看堆栈跟踪等等......
如果没有这些信息,很难诊断出您的问题,但看起来您的代码充满了泄漏。我的猜测是你没有遵循适当的内存管理技术,也没有适当地发布内容。还有一种更简单的方法可以做你想做的事情:
UIImageView *one = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ball1.png"]]
...
NSArray* ballsArray = [NSArray arrayWithObjects:one,two,three,nil];
[one release];
[two release];
[three release];
确保将图片添加到项目中(右键单击>添加>添加现有文件)
查看有关内存管理的CS139P讲座。
W.R.T。你的评论: 当您没有正确保留对象然后尝试向其发送消息时,会发生错误类型。
你的代码可能看起来像这样
@interface SomeObject : NSObject{
NSString* aString;
}
@implementation SomeObject
-(void)someMethod{
aString = [NSString stringWithString:@"A String"];
...
}
-(void)someOtherMethod{
[aString isEqualToString:@"A String"];
...
}
如果你不明白为什么会失败,你真的需要回头看看内存管理如何与iphone配合使用。
请从iTunes U下载并收听有关内存管理的CS193P讲座,它帮助了我,它会对你有帮助。
答案 1 :(得分:0)
我和pickerView有同样的问题,我已经修好了。
首先,您尝试将图片添加到选择器视图中,并且必须覆盖选择器视图的委派方法。
我猜您已经使用以下委托方法从选择器视图中获取图片:
(NSString *)pickerView: (UIPickerView *)pickerView titleForRow: (NSInteger)row forComponent (NSInteger)component
请注意,上面的函数返回NSString对象,但是你的选择器视图必须返回UIImageView。因此,Xcode将通知一个模棱两可的错误: - [UIImageView isEqualToString:]:无法识别的选择器发送到实例0x4a21df0'(UIImageView不等于NSString)
解决方案是您必须使用另一个委派的选择器视图方法:
(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
问题解决了! 如果您的情况与我不一样,请更详细地说明您的问题。 ^^