[iphone] ObjectiveC 문자열에서 정수 구문 분석

배열에서 문자열 (정수 포함)을 추출한 다음 함수에서 int로 사용하려고합니다. intValue를 사용하여 int로 변환하려고합니다.

여기 제가 시도한 코드가 있습니다.

  NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
  [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

이 오류가 발생합니다.

‘loggedIn :::’의 인수 3을 전달하면 캐스트없이 정수에서 포인터를 만듭니다.

뭐가 문제 야?



답변

이 질문에 대해 무엇이 그렇게 어려웠는지는 모르겠지만 이렇게 할 수있었습니다.

[myStringContainingInt intValue];

다음을 수행 할 수도 있습니다.

myStringContainingInt.intValue;


답변

[str intValue] 또는 [str integerValue]와 같은 문자열을 변환 할 수 있습니다.

integerValue 수신자 텍스트의 NSInteger 값을 반환합니다.

  • (NSInteger) integerValue 반환 값 10 진수 표현을 가정하고 문자열 시작 부분의 공백을 건너 뛰는 수신자 텍스트의 NSInteger 값입니다. 수신자가 숫자의 유효한 십진 텍스트 표현으로 시작하지 않으면 0을 반환합니다.

자세한 내용은 여기를 참조 하십시오.


답변

NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];

_returnedArguments의 배열 NSStrings들에서 which UITextField text재산권 기대된다. 변환 할 필요가 없습니다.

구문 오류 :

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

_appDelegate에 passwordField속성 이있는 경우 다음을 사용하여 텍스트를 설정할 수 있습니다.

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]];


답변

기본적으로의 세 번째 매개 변수 loggedIn는 정수가 아니어야하며 어떤 종류의 객체 여야하지만 메소드 호출에서 매개 변수의 이름을 지정하지 않았기 때문에 확실하게 알 수 없습니다. 확실히 볼 수 있도록 메서드 서명을 제공합니다. 아마도 그것은 NSNumber또는 무언가 가 필요합니다 .


답변

국제 사용자는 문자열 .에서 사용할 때 값이 혼합되거나 nil이되는 경우 이외의 소수 구분 기호를 사용할 수 있습니다 intValue.

예를 들어, UK에서 1.23작성된 1,23수 있도록 1.777같은 사용자에 의해 입력 될 1,777뿐, .intValue일 것이다 1777하지 1(절단)를.


nil 일 수있는 로케일 인수를 기반으로 입력 텍스트를 NSNumber로 변환하는 매크로를 만들었습니다 (nil 일 경우 장치 현재 로케일을 사용함).

#define stringToNumber(__string, __nullable_locale) (\
(^NSNumber *(void){\
NSLocale *__locale = __nullable_locale;\
if (!__locale) {\
__locale = [NSLocale currentLocale];\
}\
NSString *__string_copy = [__string stringByReplacingOccurrencesOfString:__locale.groupingSeparator withString:@""];\
__string_copy = [__string_copy stringByReplacingOccurrencesOfString:__locale.decimalSeparator withString:@"."];\
return @([__string_copy doubleValue]);\
})()\
)


답변

내가 제대로 이해하면, 당신은 당신의 변환해야 NSString에를 int? 이 코드의 평화를 시도하십시오.

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2];
int number;
sscanf([stringWithNumberInside UTF8String], "%x", &flags);


답변