UIImage를 사용하여 cell.image를 설정하려고 할 때 당황했습니다.이미지 이름:

StackOverflow https://stackoverflow.com/questions/937957

  •  06-09-2019
  •  | 
  •  

문제

NSDictionary 구조가 포함된 plist를 만들었습니다.키는 레이블(tableview cell.text를 채우는 데 사용함)이고 값은 cell.image를 '동적으로' 채우는 데 사용하려는 파일 이름입니다.정확한 png 파일 이름이 프로젝트에 로드됩니다.

일을 더 쉽게 하기 위해(내 생각에는) plist를 NSDictionary에 로드한 다음 이를 두 개의 배열로 분리합니다(allKeys 및 allValues ​​사용).

셀 이미지를 설정하려고 할 때 이것이 왜 작동하는지 이해하지 못합니다.

cell.image = [UIImage imageNamed:@"bad.png"];

그리고 이것은 그렇지 않습니다(시뮬레이터에서는 - 디버거에서 앱이 충돌하고 짖는 소리가 납니다):

cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]];

두 번째 코드 바로 앞에 다음 줄을 넣으면 문제 없이 작동하므로 objectAtIndex에서 NSString을 가져오는 것처럼 보입니다.

NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]);

또한 임시 NSString을 생성하고 여기에 [rowImageList objectAtIndex:]를 할당한 다음 해당 NSString을 사용하여 imageNamed:를 제공하려고 했습니다.

디버거의 일부 정보는 다음과 같습니다.

-[NSCFArray 길이]:인식할 수 없는 선택기가 인스턴스 0x262d910으로 전송되었습니다.

미포획으로 인한 앱 종료 예외 'NSInvalidArgumentException', reason:'*** -[NSCFArray 길이]:인식되지 않음 선택기가 인스턴스 0x262D910으로 전송되었습니다'

추가 정보/코드가 필요하면 알려주세요.

편집하다:rowImageList를 채우는 방법은 다음과 같습니다.

NSArray *myRowImages = [[NSArray alloc] init]; 
myRowImages = [searchFilterList allValues]; 
self.rowImageList = [myRowImages copy]; 
[myRowImages release]; 
//where searchFilterList is an NSDictionary that I loaded from a plist

내 plist의 스크린샷은 다음과 같습니다.[IMG][http://i42.tinypic.com/14uwffa.jpg]1[/IMG]

편집하다:수정된 rowImageList 채우기:

 NSMutableArray *myRowImages = [[NSMutableArray alloc] init];
 NSEnumerator *enumerator = [searchFilterList objectEnumerator];
 id object;

 while ((object = [enumerator nextObject])) {
     [myRowImages addObject:[object objectAtIndex:0]];
 }
 self.rowImageList = myRowImages; //edit: added self. prefix
 [myRowImages release];
도움이 되었습니까?

해결책

NSLog()의 출력을 다시 확인하고 NSString을 포함하는 배열이 아닌지 확인합니다.이것이 바로 오류가 말하는 것입니다.NSString이 필요한 곳에 NSArray를 전달하고 있습니다.

다른 팁

이 오류는 [rowImageList objectAtIndex:indexPath.row]가 예상대로 문자열이 아닌 배열을 반환함을 의미합니다.

값이 인쇄되는 이유는 배열도 인쇄하려면 NSLog 문에 %@을 지정해야 하기 때문입니다.

메서드를 디버깅하고 [rowImageList objectAtIndex:indexPath.row] 클래스를 확인하세요.아마도 배열로 판명될 것입니다.

plist가 키/문자열 쌍이고 이름을 배열로 래핑하지 않았습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top