我们如何关闭 NSFileManager?

Posted

技术标签:

【中文标题】我们如何关闭 NSFileManager?【英文标题】:How Can We Close NSFileManager? 【发布时间】:2013-04-29 13:27:30 【问题描述】:

在我的 ios 应用程序中,我使用了很多图片(大约一千张)来显示有关产品的信息。然后我在运行时遇到这样的错误;

ImageIO:CGImageRead_mapData“打开”失败 error = 24(打开的文件太多)

如何关闭打开的文件?我正在使用 NSFileManager。

感谢您的回答。

更新:

我的viewdidload中的一些代码,

while(sqlite3_step(compiledStatement) == SQLITE_ROW)  
                    NSString *imageName= [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 2)];
                    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
                    NSString *filePath = [documentsPath stringByAppendingPathComponent:imageName];

                    NSData *pngData = [NSData dataWithContentsOfFile:filePath];
                    if (pngData == nil) 
                        image2 = [UIImage imageNamed:@"resimYok.jpeg"];//horoda
                    else
                        image2 = [UIImage imageWithData:pngData];
                    
                    image2=[image2 imageByScalingAndCroppingForSize:CGSizeMake(175, 210)];

                    UIButton * urunDetayButton = [UIButton buttonWithType:UIButtonTypeCustom];
                    [urunDetayButton setFrame:CGRectMake(column*197+38 , row*350+58, 159, 170)];
                    [urunDetayButton setImage:image2 forState:UIControlStateNormal];
                    [urunDetayButton addTarget:self
                                        action:@selector(buttonClicked:)
                              forControlEvents:UIControlEventTouchUpInside];
                    urunDetayButton.tag = UrunId;
                    [scrollView addSubview:urunDetayButton];

                    UIImageView *background = [[UIImageView alloc]initWithFrame:CGRectMake(column*197+30, row*350, 175, 280)];
                    UIImage *blackBackGround = [UIImage imageNamed:@"BackImage.png"];
                    [background setImage:blackBackGround];                                            
                    [scrollView addSubview:background];
                    [background release];
                    [blackBackGround release];

                    UIImage *sepeteEkleButtonImage = [UIImage imageNamed:@"sepeteEkleButtonImage.png"];
                    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
                    [button setFrame:CGRectMake(column*197+38 , row*350+8, 159, 45)];
                    [button setImage:sepeteEkleButtonImage forState:UIControlStateNormal];
                    [button addTarget:self
                               action:@selector(addToChart:)
                     forControlEvents:UIControlEventTouchUpInside];
                    button.tag = UrunId;

                    [sepeteEkleButtonImage release];
                

在这个循环中,我创建了数千个按钮。但我看不到一些按钮和一些 imageview 的图像。例如,“背景”和“按钮”图像视图和按钮。有两张截图,那是必须的和必须的。

【问题讨论】:

您是如何显示图像或打开这些图像的? 我更新了我的问题。 你在哪里更新 imageName 变量: NSString *filePath = [documentsPath stringByAppendingPathComponent:imageName];似乎你总是得到错误的文件路径......我猜你忘了从 db 中获取它 不是这样,我再次更新我的问题。 在我看来,您正在尝试重新发明***。如果您的应用程序是 iOS 6 和更新版本,请查看 Apple 的 UICollectionView。如果您要支持较旧的 iOS 版本,请查看开源 AQGridView。这种情况下的模式不是预先填充所有按钮,而是只设置正在显示的按钮,就像 UITableView 一样。 【参考方案1】:

使用下一个语法创建图像可能会更好:

[UIImage imageWithContentsOfFile:filePath];

【讨论】:

当我的应用程序正在运行并且我使用情节提要将图像设置为按钮时,我的按钮图像没有消失,所以我没有使用这个代码块 你是什么意思?请在您的问题中详细说明您在做什么 我正在使用情节提要创建按钮和图像视图。我正在为此按钮和图像视图设置一些图像,然后出现此错误,我无法在我的按钮和图像视图上看到图像 >>为此按钮和图像视图设置一些图像 - 你是怎么做的?你什么时候使用 NSFileManager? [UIImage imageWithContentsOfFile:] - 创建图像,而不是视图。 我更新了我的问题,希望你现在能明白我在说什么。

以上是关于我们如何关闭 NSFileManager?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSFileManager 将 UIImage 保存到文件中?

Foundation框架中的NSFileManager一

NSFileManager 没有删除临时文件夹中的文件

我如何保存在 NSFileManager 中?

如何让用户使用路径目标 c 创建文件 [关闭]

如何正确地将文本文件传递给 NSFileManager