开发者

Read Image file from custom directory using NSBundle

Creating a custom directory which has all the images. Designing it custom because, it will help me to get the images as an when I need at various places in the configuration.

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];       
[filemgr createDirectoryAtPath: @"/Users/home/lifemoveson/test" withIntermediateDirectories:YES attributes: nil error:NULL];

I have placed images under test folder and are of .png types. Is there a way to retrieve the images like below.

/** UPDATED again **/

Currently this folder is under Application_Home/Resources/ImageTiles/ as per Photoscroller example. How can we change it to /Users/home/lifemoveson/test/ImageTiles/ folder ?

- (UIImage *)tileForScale:(CGFloat)scale row:(int)row col:(int)col
{
// we use "imageWithContentsOfFile:" instead of "imageNamed:" here because we don't want UIImage to cache our tiles
NSString *tileName = [NSString stringWithFormat:@"%@_%d_%d_%d", imageName, (int)(scale * 1000), col, row];

// Currently this fold开发者_C百科er is under <Application_Home>/Resources/ImageTiles/ as per Photoscroller example. 
// How can we change it to /Users/home/lifemoveson/test/ImageTiles/ folder ?
NSString *path = [[NSBundle mainBundle] pathForResource:tileName ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
return image;
}


Applications running on iOS are sandboxed; you can't simply create directories wherever you please. Your createDirectoryAtPath: call will fail. You should use one of the directories set aside for your application instead.

Once you obtain the path for one of those directories, getting the path for files within them is simply a case of using NSString's stringByAppendingPathComponent: method.


Makin a call to the functions such as

NSString* newDirPath = [self createDirectoryWithName:@"Test"];
if (newDirPath) {
    [self saveFile:@"MasterDB.sqlite" atPath:newDirPath];
}

which are implemented as follows

-(NSString*)createDirectoryWithName:(NSString*)dirName{

    NSArray* directoryArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask , YES);
    NSString* directoryPath = [directoryArray objectAtIndex:0];
    NSString* newPath = [directoryPath stringByAppendingString:[NSString stringWithFormat:@"/%@",dirName]];
    NSFileManager *filemamager = [NSFileManager defaultManager];       
    BOOL flag = [filemamager createDirectoryAtPath:newPath withIntermediateDirectories:YES attributes: nil error:NULL];
    return flag == YES ?newPath: nil;
}

-(BOOL)saveFile:(NSString*)fileName atPath:(NSString*)path{

    BOOL success;

    // Create a FileManager object, we will use this to check the status
    // of the File and to copy it over if required
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // Check if the File has already been created in the users filesystem
    NSString *filePath = [path stringByAppendingPathComponent:fileName];

    success = [fileManager fileExistsAtPath:filePath];

    // If the File already exists then return without doing anything
    if(success) return YES;

    // If not then proceed to copy the File from the application to the users filesystem

    // Get the path to the database in the application package
    NSString *pathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];

    // Copy the database from the package to the users filesystem

    NSError *error = nil;

    BOOL flag = [fileManager copyItemAtPath:pathFromApp toPath:filePath error:&error];

    return flag;
}

might help you solve your problem. Creating a directory is achieved using first function and the second will let you save files from your application bundle to any of the previously created directory. I hope you can modify it save files located at places other than Application bundle to suit to your need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜