2012-10-29 106 views
0

我正在創建一個應用程序原型,並且我希望有多個.nib佈局文件,以便讓朋友嘗試不同的佈局以查看對他們最有用的方法。查找所有.nib並從路徑中提取資源

我已經有代碼來正確切換已知的.nib文件的硬編碼數組,但我想擴大我的知識總體,所以我只想寫一個通用系統,可以找到所有.nib文件該捆綁包,所以我不必更改任何代碼,如果我添加一個新的.nib佈局。

我看到給定資源的路徑確實是完整路徑。例如:

/var/mobile/Applications/69B85DBB-3B79-43F0-B88E-FFFF/TestApp.app/en.lproj/some_asset.nib 

我嘗試使用完整路徑名稱加載.nib,它不工作,據我所知。似乎工作的唯一的東西是剝離的路徑和擴展到下面的資源名稱?

如果是這樣的話,我有以下幾點:

NSArray *availableNibs = [[NSBundle mainBundle] pathsForResourcesOfType:@"nib" 
                  inDirectory:nil]; 

// Just grab the first .nib as a test and remove the .nib extension 
NSString *aNib = [availableNibs[0] stringByReplacingOccurrencesOfString:@".nib" 
                  withString:@""]; 

// Start at the end of the string and find the first '/' 
for (NSInteger index = [aNib length] - 1; index >= 0; --index) { 
    if ([aNib characterAtIndex:index] == '/') { 
     // Get us down to the resource name - return string starting after that '/' 
     aNib = [aNib substringFromIndex:index + 1]; 
     break; 
    } 
} 
// have resource name in 'aNib', so open 
self.viewController = [[My_ViewController alloc] initWithNibName:aNib 
                  bundle:nil]; 

也許我的期望是錯誤的,但是這似乎笨拙比我預期?有沒有更簡單的方法來提取資源名稱,也許使用更少的代碼?

而且,通常情況下,我可能會在嘗試做這類事情時意識到任何其他缺陷,或者這是大致正確的方法嗎?

乾杯提前

回答

2

嘗試

NSString *nibPath = availableNibs[0]; 
NSString *nibName = [[nibPath lastPathComponent] stringByDeletingPathExtension]; 
self.viewController = [[My_ViewController alloc] initWithNibName:nibName bundle:nil]; 
+0

哇,這是如此簡單和乾淨。這正是我所期待的。 – JDischler