2010-11-08 47 views
1

大家好我想要保存图像在我目前在我的视图,但问题是,我只能保存一个图像,如果我想保存另一个图像,它取代了旧的捆绑我没有得到然后如何保存包中的多个图像。 这是我的代码。如何在iphone应用程序中保存多个文件包?

- (void)writeImageToDocuments:(UIImage*)image 
{ 
    NSData *png = UIImagePNGRepresentation(image); 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSError *error = nil; 
    [png writeToFile:[documentsDirectory stringByAppendingPathComponent:@"image.png"] options:NSAtomicWrite error:&error]; 


} 

请帮助我,如何

由于保存多张图片,文件等捆绑提前

+0

粗体和斜体确实无助于格式化代码。使用代码格式代替(粘贴代码,标记它,点击'101010'按钮) – vikingosegundo 2010-11-08 12:06:10

+0

感谢您清理代码;我没有注意到writeToFile的双重调用:options:error:before。我已经在下面调整了我的答案 - 希望它有帮助。 – Tommy 2010-11-08 12:52:43

+0

非常感谢兄弟我也在寻找如何做到这一点,现在你让我知道我需要按'101010',我会尝试。 – Sabby 2010-11-08 13:19:35

回答

5

你不保存成束,你保存到您的应用程序的文档目录。它没有捆绑方面。

您正在使用文件名@“image.png”作为您保存的每个文件。因此,每一个新的写都会覆盖旧的。实际上,你将每个文件写两次。要保存多个文件,请使用不同的文件名。

传递一个数值常量作为NSData writeToFile的“options:”参数也是错误的形式writeToFile:options:error :(或者的确,任何类似的情况)。值'3'包含一个未定义的标志,所以您应该期待未定义的行为,并且Apple可以合法拒绝批准您的应用程序。可能你想保留NSAtomicWrite行,然后杀掉它。

如果你只是希望找到第一个未使用image.png文件名,简单的解决办法是这样的:

int imageNumber = 0; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *pathToFile; 

do 
{ 
    // increment the image we're considering 
    imageNumber++; 

    // get the new path to the file 
    pathToFile = [documentsDirectory stringByAppendingPathComponent: 
              [NSString stringWithFormat: 
                @"image%d.png", imageNumber]]; 
} 
while([fileManager fileExistsAtPath:pathToFile]); 
/* so, we loop for as long as we keep coming up with names that already exist */ 

[png writeToFile:pathToFile options:NSAtomicWrite error:&error]; 

还有一个潜在的下行到;所有你尝试的文件名都在autorelease池中。所以他们至少会一直留在记忆中,直到这个特定的方法退出。如果最终尝试成千上万的话,那可能会成为一个问题 - 但它与答案没有直接关系。

假设你总是添加新文件,但从不删除文件,那么这个问题是你可以用二分查找更好地解决的问题。

搜索的文件名将是image1.png,image2.png等。

相关问题