Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Objective-C中的category访问@private实例变量?_Objective C_Ios_Categories_Instance Variables_Private Members - Fatal编程技术网

如何使用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