在UIPickerView中添加图片

时间:2010-04-06 17:58:10

标签: iphone objective-c cocoa-touch xcode

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中显示图像。但是在执行此代码时应用程序崩溃了。

任何人都请帮忙。

2 个答案:

答案 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

问题解决了! 如果您的情况与我不一样,请更详细地说明您的问题。 ^^