在for循环中动态创建uiimageview

时间:2010-10-12 12:20:37

标签: iphone arrays uiimageview

您好   我是iphone的新手。我已将图像存储在数组中。我想知道如何在UIImageView中显示这些图像,其中UIImageView应根据文件列表计数增加动态创建,在for循环中。这是代码

NSArray *filelist;
NSFileManager *filemgr;
int count;
int i=0;
int t=0;
filemgr = [NSFileManager defaultManager];
filelist = [filemgr directoryContentsAtPath: @"/Mypath/"];
NSMutableArray *imageVwArr = [[NSMutableArray alloc]init];  
count = [filelist count];
count++;
for(i = 0; i < count; i++)                                
{
    UIImageView *imgVw = [[UIImageView alloc] initWithImage:[filelist objectAtIndex:i]];
    [imgVw setUserInteractionEnabled:YES];
    [imgVw setTag:i];
    imgVw.frame=CGRectMake(t, 0, 480, 320);
    [imageVwArr addObject:imgVw];
    [self.view addSubview:imgVw];
    [imgVw release];
    t=t+480;        
}

它显示错误: 抛出'NSException'实例后终止调用 程序收到信号:“SIGABRT”。

我做错了我不知道创建动态uiimageview  提前谢谢....

1 个答案:

答案 0 :(得分:1)

[filemgr directoryContentsAtPath: @"/Mypath/"];

最有可能这将返回零。因为这条路径不存在。您无法访问iphone上的完整文件系统。

将文件放入应用程序文档目录中。

NSString *documentDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

编辑:我刚试过这个,并没有引发异常,所以你的bug就在别的地方 编辑2:你正在增加数量,为什么?通过递增计数,您的for循环尝试再次访问不在数组中的对象。

如果你的fileArray有10个条目,则计数为10.然后你增加计数,所以count将是11,但你的数组仍然只有10个条目。
你的for循环将从索引0(这是你的第一个文件名)开始,直到它访问索引9(这是你的第10个文件名)一切正常。

在下一个循环中,它尝试访问索引10处的文件名。此索引超出范围。

EDIT3:

下一个错误:initWithImage:想要一个UIImage,而不是文件名。使用:

NSString *fullPath = [yourImagePath stringByAppendingPathComponent:[filelist objectAtIndex:i]];
UIImage *image = [[[UIImage alloc] initWithContentsOfFile:fullPath] autorelease]
UIImageView *imgVw = [[UIImageView alloc] initWithImage:image];

EDIT4: 也许只有在可以从文件中创建UIImage时才想创建imageViews。因此,如果发生的文件不是有效图像,则不会创建空的imageview。:

if (!image)
    continue;
UIImageView *imgVw = [[UIImageView alloc] initWithImage:image];

EDIT5&安培; LAST: 我执行imageViewController。请不要按原样使用它,尝试理解它并学习一些东西。它远非完美。