我把图片放在支持文件中,为什么我通过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
答案 0 :(得分:-1)
你可以通过两种方式获得NSBundle
<强> SWIFT 强>
按班级获取套件
let bundle = NSBundle(forClass: YourClass.self)
您可以按标识符
获取捆绑包NSBundle(identifier: "bundleID")
第一个问题是您可能想要使用另一个包中的图像资源,而您无法访问它,例如,您不会在您的类中导入子模块只是为了获取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)