NSBundle pathForResource为nil,我该如何获取路径?

时间:2015-12-11 12:15:57

标签: ios objective-c null nsbundle

我把图片放在支持文件中,为什么我通过NSBundle mainbudle得到nil?我应该把这些图片放在哪个文件夹中?或者我犯了其他错误?

代码:

- (void)startAnimating:(int)count andPictureName:(NSString *)picName {

    if (self.imgViewCat.isAnimating) {
        return;
    }


    NSMutableArray *arrayM = [NSMutableArray array];

    for (int i = 0; i < count; i++) {
        NSString *imgName = [NSString stringWithFormat:@"%@_%02d.jpg", picName,i];
        //The first method UIImage *imgCat = [UIImage imageNamed:imgName];
        //The second method 
        NSString *path = [[NSBundle mainBundle] pathForResource:imgName ofType:nil];
        NSLog(@"%@",path);
        UIImage *imgCat = [UIImage imageWithContentsOfFile:path];
        [arrayM addObject:imgCat];

    }
}

PS:第一种方法,我使用// UIImage * imgCat = [UIImage imageNamed:imgName];它确实有效。但我想使用第二种方法。因为NSBundle mainBundle可以管理内存,释放内存。但第一种方法很强,它会保留内存。

解决方案:resourcePath] stringByAppendingPathComponent:imgName

1 个答案:

答案 0 :(得分:-1)

你可以通过两种方式获得NSBundle

<强> SWIFT

  1. 按班级获取套件

    let bundle = NSBundle(forClass: YourClass.self)
    
  2. 您可以按标识符

    获取捆绑包
    NSBundle(identifier: "bundleID")
    
  3. 第一个问题是您可能想要使用另一个包中的图像资源,而您无法访问它,例如,您不会在您的类中导入子模块只是为了获取YourClass.self

    第二种解决方案可以帮助你,但问题是获取bundle id很棘手,因为我创建了一个名为Configuration的小类

    internal class Configuration {
    
    /// The current framework bundle
    internal static let bundle = NSBundle(forClass: Configuration.self)
    
    /// The framework identifier
    internal static let identifier: String = {
        guard let identifier = Configuration.bundle.bundleIdentifier else {
            fatalError("Missing bundle identifier.")
        }
        return identifier
    }()
    } 
    

    你可以得到像这样的图像

    let bundle = NSBundle(forClass: YourClass.self) //Or NSBundle(identifier: Configuration.identifier)
    let image = UIImage(named: "MyImage", inBundle: bundle, compatibleWithTraitCollection: nil)