您好 我是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 提前谢谢....
答案 0 :(得分:1)
[filemgr directoryContentsAtPath: @"/Mypath/"];
最有可能这将返回零。因为这条路径不存在。您无法访问iphone上的完整文件系统。
将文件放入应用程序文档目录中。
NSString *documentDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
如果你的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。请不要按原样使用它,尝试理解它并学习一些东西。它远非完美。