大佬教程收集整理的这篇文章主要介绍了Objective-C对象typedef产生奇怪的@encode并打破KVC,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#import <Foundation/Foundation.h> #import <objc/runtime.h> typedef NSString* MyStringRef; typedef NSString MyString; @interface ClassA : NSObject @property (nonatomic,copy) MyStringRef StringA; @property (nonatomic,copy) MyString *StringB; @end @implementation ClassA @synthesize StringA = _StringA; @synthesize StringB = _StringB; @end int main() { unsigned int count = 0; Ivar *ivars = class_copyIvarList([ClassA class],&count); for (unsigned int i = 0; i < count; i++) { Ivar thisIvar = ivars[i]; NSLog(@"thisIvar = %s,%s",ivar_getName(thisIvar),ivar_getTypeEncoding(thisIvar)); } ClassA *a = [[ClassA alloc] init]; NSLog(@"Out: %@",[a valueForKey:@"StringA"]); NSLog(@"Out: %@",[a valueForKey:@"StringB"]); }@H_674_4@这是输出:
$clang --version Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn) Target: x86_64-apple-darwin11.4.0 Thread model: posix $clang -o typedef -fobjc-arc -framework Foundation typedef.m && ./typedef 2012-06-06 20:14:15.881 typedef[37282:707] thisIvar = _StringA,@"NSString" 2012-06-06 20:14:15.884 typedef[37282:707] thisIvar = _StringB,^{NSString=#} 2012-06-06 20:14:15.885 typedef[37282:707] Out: (null) 2012-06-06 20:14:15.888 typedef[37282:707] *** TerminaTing app due to uncaught exception 'NSUnkNownKeyException',reason: '[<ClassA 0x7fabe0501480> valueForUndefinedKey:]: this class is not key value coding-compliant for the key StringB.' *** First throw call stack: ( 0 CoreFoundation 0x00007fff835fef56 __exceptionPreprocess + 198 1 libobjc.A.dylib 0x00007fff878e5d5e objc_exception_throw + 43 2 CoreFoundation 0x00007fff836891b9 -[NSException raise] + 9 3 Foundation 0x00007fff83e77703 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 240 4 Foundation 0x00007fff83dae38e _NSGetUsingKeyValueGetter + 108 5 Foundation 0x00007fff83dae315 -[NSObject(NSKeyValueCoding) valueForKey:] + 392 6 typedef 0x000000010e84bc6d main + 317 7 typedef 0x000000010e84b9c4 start + 52 )@H_674_4@我在这里遇到的问题是Objective-C是什么导致typedef NSString MyString有效地创建一个包含一个Class类型变量的结构,然后在我使用MyString的地方使用它.例如结构看起来像这样(在咨询this之后):
struct NSString { Class a; };@H_674_4@它有意义,但导致valueForKey:失败,大概是因为它现在是一个结构,所以它不能以与对象相同的方式返回它.或者更确切地说,它属于搜索顺序described in the docs的“抛出异常”部分. @H_674_4@我只想了解导致这种情况发生的语言是什么,以及为什么它不能以同样的方式处理我的2 typedef.
以上是大佬教程为你收集整理的Objective-C对象typedef产生奇怪的@encode并打破KVC全部内容,希望文章能够帮你解决Objective-C对象typedef产生奇怪的@encode并打破KVC所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。