2014-10-05 60 views
0

在我的應用程序中,我將手動創建一個對象數組,以創建一個平等數組,其中的對象存儲在參考文件夾中。我用contentsOfDirectoryAtPath創建自動數組。手動VS自動數組澄清

問題是當我在集合視圖cellForItemAtIndexPath中稍後引用數組時。手動創建的數組運行正常,但自動數組的格式不相同並引發錯誤。

不同之處在於手動創建的數組有3個對象,自動創建的數組有一個對象,在日誌中由額外的括號顯示。我如何獲得自動創建的數組來添加每個文件夾對象,這樣我就可以像使用手動創建的數組一樣獲得一個包含3個對象的數組?在此先感謝您的時間。

手動創建targetArray

//@interface 

@property (nonatomic, strong) NSArray *targetArray; 

//viewdidLoad 

self.targetArray = @[@"one",@"two", @"three"]; 

NSLog(@"Target Array description test = %@", [_targetArray description]); 

//returns 

Target Array description test = (
"one", 
"two", 
"three" 
) 

通過閱讀參考文件夾

//@interface 

@property (nonatomic, strong) NSArray *targetArray; 

//viewdidLoad 

for (int i = 0; i <= [folderArray count] -1; i++) { 

NSString *sectionString = [folderArray objectAtIndex:i]; 

NSMutableArray *subFolderArray = [[NSMutableArray alloc] init]; 

NSArray *targetArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:nil]; 

NSLog(@"Target Array description test = %@", [_targetArray description]); 

} 

//returns 

Target Array description test = (
    (
    "one", 
    "two", 
    "three" 
) 
) 

的cellForRowAtIndexPath爲W /錯誤日誌以供參考

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

sheetCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"SheetCell" forIndexPath:indexPath]; 

NSLog(@"Target Array description test = %@", [_targetArray description]); 

NSString *sheetString = [self.targetArray objectAtIndex:indexPath.row]; 

ERROR: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM stringByDeletingPathExtension]: unrecognized selector sent to instance 0x78794450' 

cell.sheetImageView.image = [UIImage imageNamed:sheetString]; 

cell.sheetLabel.text = sheetString; 

return cell; 

} 
+0

您似乎有兩個不同的對象,名爲targetArray:一個是self.targetArray(也可以通過其實例變量_targetArray訪問),另一個是在for循環中聲明的另一個對象(NSArray * targetArray)。您的NSLog只能引用前者。你的for循環也沒有關閉} - 是一個錯字? – pbasdf 2014-10-05 22:41:06

回答

0

自動創建數組如果您知道 「contentsOfDirectoryAtPath」方法將始終返回一組對象在一個單一的元素外陣列,你可以「解包」由內陣列:

NSArray *targetArray = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:nil] objectAtIndex:0]; 

(我不是在我的電腦上通過的XCode運行上面來檢查它編譯)

作爲一個邊請注意,您提供的代碼段存在一些問題(可能是拼寫錯誤或複製/粘貼錯誤),因爲您要分配給名爲「targetArray」的局部變量,然後在print語句中訪問名爲「targetArray」的實例變量 - 不是同一個對象。