2015-12-11 58 views
0

我把圖片放在支持文件中,爲什麼我通過NSBundle mainbudle得到nil?我應該把這些圖片放在哪個文件夾中嗎?或者我犯了其他錯誤?NSBundle pathForRes是零,我怎麼能得到路徑?

代碼:

- (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

圖像試試這個的NSString *路徑= [[[一個NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imgName]。 –

+1

嗨。爲什麼你想要在主包中有圖像?最簡單的方法是將圖像放入'* .xcassets'文件夾中,稍後通過'[UIImage imageNamed:]''將其獲取。 –

+0

在模擬器中運行它。記錄'[[NSBundle mainBundle] resourcePath]'。記錄'imgName'。看看最終的路徑。這是你的意思嗎?您的Mac上是否有位於該位置的文件? –

回答

-1

您可以通過2種方式

SWIFT

  1. 按類別獲取束獲得一個NSBundle

    let bundle = NSBundle(forClass: YourClass.self) 
    
  2. 您可以通過標識

    NSBundle(identifier: "bundleID") 
    

與第一個問題是,你可能想從另一個捆綁使用圖像資產,你不能訪問它,例如您將得到束在你的類無法導入子模塊只拿到YourClass.self

第二個解決方案將幫助您處理,但問題是,它的棘手得到軟件包ID,我創建了一個小型的類名爲配置

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)