2015-02-01 13 views
0

UIAlertView의 텍스트로 넣으려는 NSMutableArray의 NSString 출력을 기본 텍스트로 사용하고 있습니다.iOS UIAlertView에서 NSString 텍스트를 설정하면 오류가 발생합니다. __NSCFNumber _isNaturallyRTL

사전에서 오는 NSString에서 NSString을 다시 만들어야한다는 것을 알았습니다. 그렇지 않으면 'NSInvalidArgumentException'이 만들어집니다. 특히

, 내가 전화 할 때 :

NSMutableArray *serverResponseNumbers; 
... 
UIAlertView *alertviewmod=[[UIAlertView alloc] initWithTitle:@"Modify" message:nil delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm",nil]; 
[alertviewmod setDelegate:self]; 
alertviewmod.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; //two text fields 
[alertviewmod textFieldAtIndex:0].keyboardType=UIKeyboardTypeNumberPad; 
NSString *nsRecordNumber=[serverResponseNumbers objectAtIndex:an_int_variable]; 
... 
[alertviewmod textFieldAtIndex:0].text= nsRecordNumber; 

나는이 예외가 얻을 :

-[__NSCFNumber _isNaturallyRTL]: unrecognized selector sent to instance 0xde4dbf0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber _isNaturallyRTL]: unrecognized selector sent to instance 0xde4dbf0' 

그냥이 (NSLog 그것을 증명 가정) '증명'까지를, 다음 작품 :

NSLog(@"nsRecordNumber=%@",nsRecordNumber); 

또는 다음 줄이 잘 작동합니다.

[alertviewmod textFieldAtIndex:0].text= @"static text"; 

수정 된 내용은 다소 세련되지 않지만 NSString을 다시 작성하는 것입니다.

 int number=[nsRecordNumber integerValue]; 
    NSString *nsNumberRecreated=[NSString stringWithFormat:@"%d",number]; 
    [alertviewmod textFieldAtIndex:0].text= nsNumberRecreated; 

하지만이 정말 필요하지 않을한다 :이 해킹을 사용할 수 있도록 내 경우에는이 문자열, 그냥 정수이다. 그리고 나는 '_isNaturallyRTL'이 문서화되지 않은 함수라는 것을 읽었습니다. 아무도 이것을 설명 할 수 있습니까? 아마도 내가 잘못하고있는 것, 또는 버그일까요? 나는 4.6을 사용하고 iOS 4.3을 타겟팅하고 iPadiOS 5.1.1으로 테스트합니다.

+0

중복 가능한 [인스턴스로 보낸 '인식 할 수없는 선택기를 디버깅하는 방법'오류] (http://stackoverflow.com/questions/25853947/how-can-i-debug-unrecognized-selector-sent-to-instance -error) –

+0

NSString을 예상하도록 선언 된'text' 속성을 설정하기 위해 NSNumber를 사용하려고합니다. –

+0

제 사과, NSString 변수 이름 안에 'Number'라는 혼란스러운 변수 이름을 사용했습니다. 그것은 NSString입니다. 숫자 나 NSNumber가 아니며 경고 텍스트 상자에 추가됩니다. – Mark

답변

0

내 생각에 nsRecordNumber는 실제로 NSString 대신 NSNumber입니다. 그 이유는 NSLog 작동하지만 텍스트를 설정하지 않는 설명 할 것이다. 그렇다면 당신이 할 수 있습니다.

[alertviewmod textFieldAtIndex:0].text= [NSString stringWithFormat:@"%@", nsRecordNumber]; 

기본적으로 NSLog에서 수행하고있는 작업입니다.

편집 : 더 나은 선택이 될 것입니다.

[alertviewmod textFieldAtIndex:0].text= [nsRecordNumber stringValue]; 

매우 실제로는 NSString 또는 NSNumber입니다.

if ([nsRecordNumber isKindOfClass:[NSNumber class]]) 
{ 
    NSLog(@"it is a number"); 
} 
else if([nsRecordNumber isKindOfClass:[NSString class]]) 
{ 
    NSLog(@"it is a string"); 
} 

이 정보는 문제를 해결하는 데 도움이되기를 바랍니다. 어디 까지나 _isNaturallyRTL이 어디서 왔는지는 모르겠습니다.

+0

"사용자"텍스트를 생성하기 위해'description'을 사용해서는 안됩니다 - 일부 특정 클래스를 제외하고 설명은 진단만을위한 것입니다. 대신 NSNumber의 적절한 메소드 ('intValue','floatValue' 등)를 사용하여 값을 추출한 다음 적절한'%'포맷 코드로 포맷하십시오. –

+0

@HotLicks는 설명을 사용하여이 문제를 해결하는 이상적인 방법이 아니며 올바른 답변을 제공합니다. 그러나 NSNumber에 stringValue 메서드가 있습니다.이 메서드는 그가 제안한 방식대로 사용하거나 사용할 수 있습니다. nsRecordNumber를 검사하고 NSString이 원래 생각했던대로 또는 NSNumber가 의심 스러운지 확인하는 것이 좋습니다. –