【问题标题】:Not getting full path of NSLibraryDirectory没有得到 NSLibraryDirectory 的完整路径
【发布时间】:2012-10-31 12:33:41
【问题描述】:

我想从位于NSLibraryDirectory 的文件夹中获取图像。

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES);
 NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:str]];

 NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent: [@"images" stringByAppendingFormat:@"%d",[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]] stringByAppendingFormat:@".png"];
 img = [UIImage imageWithContentsOfFile:getImagePath];
 NSLog(@"img:%@", img);

这是我使用的代码

getImagePath 的打印说明:

/用户/管理员/库/应用程序支持/iPhone 模拟器/5.0/Applications/6842528E-9629-4DE7-96C1-A46AEB8A8EE0/Library/Thapa

应该是:

getImagePath 的打印说明:

/用户/管理员/库/应用程序支持/iPhone 模拟器/5.0/Applications/6842528E-9629-4DE7-96C1-A46AEB8A8EE0/Library/Thapa/images47.png

这个不知道怎么实现的,我试过的都在上面。

提前致谢

【问题讨论】:

    标签: iphone directory


    【解决方案1】:

    首先,您在一行代码中做了太多事情。编写代码的最佳做法是保持简单(这样您的代码对您和其他任何查看它的人都是可读的)。

    当我看到这一行时:

    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent: [@"images" stringByAppendingFormat:@"%d",[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]] stringByAppendingFormat:@".png"];
    

    那里发生的事情太多了!

    为什么不这样做:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,     NSUserDomainMask, YES);
    if(paths)
    {
        NSString *documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:str]];
        if(documentsDirectory)
        {
            NSInteger highScoreNumber = [[NSUserDefault standardUserDefaults] integerForKey: @"HighScore"];
            NSString * numberGraphicFilename = [NSString stringWithFormat: @"images%d.png", highScoreNumber ];
            if(numberGraphicFilename)
            {
                NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent: numberGraphicFilename];
                if(getImagePath)
                {
                    img = [UIImage imageWithContentsOfFile:getImagePath];
                }
            }
        }
    }
    

    奖励:这也为您的代码引入了错误检查/处理的概念。

    要编写更多代码,但阅读和遵循要容易得多。走这条路,您也许可以找出问题所在。

    【讨论】:

    • 这个方法好像更有意义,我先试试吧。
    • 我的问题是,为什么图像没有得到,因为 userdefault 而不是得到值,而是增加计数器,但为什么会这样?
    【解决方案2】:

    getImagePath改成

    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent: [@"YourSubFolderName/images" stringByAppendingFormat:@"%d",[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]] stringByAppendingFormat:@".png"];
    

    所以您的代码如下所示

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,     NSUserDomainMask, YES);
    NSString *documentsDirectory= [paths objectAtIndex:0];
    
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent: [@"YourSubFolderName/images" stringByAppendingFormat:@"%d",[[NSUserDefaults standardUserDefaults] integerForKey:@"HighScore"]] stringByAppendingFormat:@".png"];
    img = [UIImage imageWithContentsOfFile:getImagePath];
    NSLog(@"img:%@", img);
    

    【讨论】:

    • 我的问题是,为什么图像没有得到,因为 userdefault 而不是得到值,而是增加计数器,但为什么会这样?
    • 上面的代码只会获取最后保存的图片。你想做什么。请解释一下
    • 是的,我正在尝试获取数组中特定文件夹的所有图像。
    • NSUserDefaults 的值从 1、2、3 等开始...我说的对吗?
    • 然后循环,从1开始,到NSUserDefaults值结束
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多