2009-11-01 9 views
0

개체를 테이블에 표시하기 위해 텍스트 값을 가져 오는 방법은 무엇입니까? 다른 게시물은 객체가 NSString이 아니며 객체에 텍스트를 요청해야한다고 말합니다. 그러나 어떻게? 이 오류는 이것이다 :개체의 텍스트 값을 가져 오는 방법은 무엇입니까?

* 인해 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는 : -이를 위해

'* [이름 isEqualToString는 :] 알 수없는 선택기 예를 0xf51b60로 전송' 목표 - C 코드 : 모두 당신 고급없는 프로그래머에

NSString *cellValue = [namesArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = cellValue; 
return cell; 

나의 사과, 나는이에 새로 온 사람과 어느 NSObject의 문서에서 답을 찾을 수 없습니다. 감사.

+0

개체 유형은 무엇입니까? 객체에 대한 표준 "텍스트 값"이 없으므로 여러 가지 방법이 청구서에 부합 할 수 있습니다. 공통적 인 것은'-stringValue'입니다. – outis

+0

또 하나는'-description'입니다. – outis

+0

@outis : 아니요, 공통적 인 것은'-description'입니다. 이것은'NSObject'에서 구현되며 일반적으로 어떤 클래스가 우선 적용됩니다. 문자열을 반환합니다. – jbrennan

답변

0

NSLog()"%@" 형식의 개체를 표시하려는 경우 invoqued 메서드는 존재하는 경우 -(NSString*) description입니다. 자신의 클래스에 대해이 메서드를 작성하는 것은 사용자의 책임입니다.

+0

감사합니다. 시도하고 무슨 일이 일어나는 지 봅니다. – Doug

3

-description 메서드를 사용하면 Java에서 toString()과 비슷한 객체의 문자열 값을 가져올 수 있습니다. 많은 수업은 -stringValue 방법에도 응답합니다.

그러나 -description은 주로 디버깅 목적으로 사용됩니다. 게시 한 코드가 작동하지 않는 경우 namesArrayNSString 인스턴스가 아닌 다른 인스턴스가 포함되어있는 경우 배열에 어떤 개체가 있는지 찾아야합니다. NSString에 객체를 캐스트 할 수 없습니다.

+0

원래 코드에 문자열 이름이 있고 테이블에 제대로 표시되면 코드가 작동했습니다. 하지만 지금 문자열 이름을 제거하고 사용자가 이름을 입력하고 저장하고 가져오고 테이블에 표시하는 CoreData를 사용하려고합니다. 예, namesArray는 문자열을 포함하기로되어 있으므로 CoreData 문제가 아직 작동하지 않거나 stringValue 메소드가 필요합니다. – Doug

+0

오류 메시지에 따르면 문자열로 취급하는 "이름"이라는 클래스가 있으므로 오류가 발생합니다. – Darren

2

지금까지 답변을 느낀 것은 질문의 요점을 놓치고 있습니다. 귀하의 실수는 Names 클래스가 isEqualToString: 메소드를 구현하지 않는다는 것입니다. UITableViewCelltextLabel 문자열이 표시된 문자열과 다른 경우 만 변경하고 isEqualToString:을 사용하여이 비교를 수행하기 때문에 (아마도) 이 NSString 속성이기 때문에 호출됩니다 (아마도).

그러나 NSString은 제공하지 않습니다. Names 개체를 제공하고 있으므로 물론 작동하지 않을 것입니다. Names은 분명히 사용자 지정 개체이므로이 개체에서 문자열 표현을 추출하는 메서드를 제공해야하며 명시 적으로 메서드를 호출해야합니다.

예를 들어, -asString라는 방법을 구현할 수 (무서운 이름이됩니다 만,이 점을 설명하는 것입니다)과 같이 보일 수 있다는 :

- (NSString*) asString { 
    return [NSString stringWithFormat:@"This name is %@", aNameIvar]; 
} 

당신은 다음을 사용합니다 예 :

Name * thisName = [namesArray objectAtIndex:indexPath.row]; 
cell.textLabel.text = [thisName asString]; 
return cell; 

이 메서드의 고유 이름은 -stringValue입니다. -stringValue은 그들이 보유하고있는 데이터의 문자열 표현을 반환하기 위해 여러 코코아 객체에 사용되는 등 NSNumber, NSCell (맥) 등

편집

:

피터 Hosey이 this StackOverflow.com에 매우 능숙이 정확한 질문에 대답 문제.

+0

나는 여기에 게시하기 전에 Peter Hosey의 대답을 보았습니다. 매우 비슷한 상황이지만, 그의 대답이 "그 텍스트를 물체에 물으라고"했을 때 나는 망 쳤다. -stringValue 메소드에 대한 제안을 시도해 볼 수 있습니다. 감사. Darren에 대한 나의 반응도 참조하십시오. 이것은 특별히 문자열을 정의 할 때 작동하지만, 현재 CoreData를 대신 사용하려고합니다. – Doug

관련 문제