如何使用Objective-C中的category访问@private实例变量?
正如苹果公司文档中所述:如何使用Objective-C中的category访问@private实例变量?,objective-c,ios,categories,instance-variables,private-members,Objective C,Ios,Categories,Instance Variables,Private Members,正如苹果公司文档中所述: 注意类别不能为类声明额外的实例变量;它只包括方法。但是,类范围内的所有实例变量也在类别范围内。它包括类声明的所有实例变量,甚至是声明为@private的实例变量。 然而,当我试图访问UITextField“\u selectionRange”的私有实例变量时,我得到了symbol not found错误。下面是我的源代码和错误消息,供您参考。我为那些阅读我最后一个示例“NSString”的人道歉。这不是一个好例子,因为NSString类中没有任何@private实例变量
注意类别不能为类声明额外的实例变量;它只包括方法。但是,类范围内的所有实例变量也在类别范围内。它包括类声明的所有实例变量,甚至是声明为@private的实例变量。
然而,当我试图访问UITextField“\u selectionRange”的私有实例变量时,我得到了symbol not found错误。下面是我的源代码和错误消息,供您参考。我为那些阅读我最后一个示例“NSString”的人道歉。这不是一个好例子,因为NSString类中没有任何@private实例变量
NSString+Utilities.h
#import <Foundation/Foundation.h>
@interface UITextField (Editing)
- (void)deleteBkw;
@end
错误:
架构i386的未定义符号:
“\u OBJC\u IVAR\u$\u UITextField.\u selectionRange”,引用自:
-NSString+Utilities.o中的[UITextField(编辑)deleteBkw]
ld:未找到架构i386的符号
collect2:ld返回了1个退出状态,因为您正在将方法添加到NSString类
length
,您的代码将被self.length替换。
NSString没有变量名称长度:
NSString类有两个基本方法length和characterAtIndex:,它们为其接口中的所有其他方法提供了基础。length方法返回字符串中Unicode字符的总数。characterAtIndex:通过索引访问字符串中的每个字符,索引值从0开始
因此,您可以通过调用[self length]来访问length方法(而不是变量),并且只能通过这种方式。您是否尝试添加
#import
?我刚刚添加到我的NSString+Utilities.h中。但是,相同的错误仍然存在。很抱歉,我的上一个NSString示例不是一个好的示例。我使用UITextField更新了一个新示例。
@implementation UITextField (Editing)
- (void)deleteBkw {
NSLog(@"%d:%d", _selectionRange.location, _selectionRange.length);
}
@end