2017-05-12 4 views
0


return [[DJLocalizationSystem shared] localizedStringForKey:(key) value: @"" table: nil bundle:bundle];
그러나,이
return objc_msgSend([DJLocalizationSystem shared], @selector(localizedStringForKey:value:table:bundle:),(key),@"",nil,bundle);
작동하지 않습니다 잘 작동 그리고 방법은 문자열 값을 반환합니다.
enter image description here런타임에 objc_msgSend를 사용할 때 왜 그런가요?

EXC_BAD_ACCESS 코드 = 1, 주소 = 0x8이
는 비슷한 질문 stackoverflow 있습니다,하지만 난 대답 중 어느 것도 정확하지 생각합니다. 0x8과 아무 관련이 없습니다.

+0

앤디 objc_msgSend의 대해서 typesafety 직접 호출하기 때문에,이 http://stackoverflow.com/a/2573949/753878, 캐스팅에 대해 특히 부분을 고려된다,있을 수 있습니다 당신이 제공하는 코드에 대한 다양한 문제. 이 다른 호출 규칙 (ABI에서 정의 됨)을 제외하면 다른 데이터 유형에 따라 다를 수 있으므로 가능한 한 많이 혼동하지 말 것을 제안합니다. – dymv

답변

0

objc_msgSend은 32 비트 iPhone 및 시뮬레이터에서 잘 작동하지만 64 아이폰에서는 유형을 지적해야합니다. 그래서 내 코드는 서로 멀리 떨어져
NSString *(*action)(id, SEL, NSString *, NSString *, NSString *, NSBundle *) = (NSString * (*) (id, SEL, NSString *, NSString *, NSString *, NSBundle *)) objc_msgSend; action(system, @selector(localizedStringForKey:value:table:bundle:), (key), @"", nil, [NSBundle bundleForActionCamera]);