abh*_*war 4 iphone objective-c nsstring ios
我刚刚在一个班级内创建了一个Extensionfor 班级NSStringCategory
#import "NSString+Name.h"
@interface NSString(Name)
@property (nonatomic, retain) NSString *var;
@end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试访问类别类中的私有变量时,应用程序崩溃并给出错误。
@implementation NSString (Name)
- (NSString*)newString{
[self setVar:@"Its a new string"]; // Crashes here
NSLog(@"name = %@",self.var);
return self.var;
}
@end
Run Code Online (Sandbox Code Playgroud)
撞车原因
无法识别的选择器发送到实例0x1023641c8 2015-05-25 11:12:49.246 Tute [710:14433] ***由于未捕获的异常'NSInvalidArgumentException'终止了应用程序,原因:'-[__ NSCFConstantString setVar:]:无法识别的选择器发送到实例0x1023641c8'
如果我能够在该变量中分配值,那么为什么说不识别的选择器
您应该使用关联对象。在下面找到对我有用的代码:
。H
@interface NSString (Name)
@property (nonatomic, assign)NSString *var;
- (NSString*)newString;
@end
Run Code Online (Sandbox Code Playgroud)
.m
static char const * const Key = "SomeKey";
@implementation NSString (Name)
- (NSString*)newString
{
self.var = @"Its a new string";
NSLog(@"name = %@",self.var);
return (self.var);
}
- (void)setVar:(NSString *)aVar {
objc_setAssociatedObject(self, Key, aVar, OBJC_ASSOCIATION_ASSIGN);
}
- (NSString*)var {
return (NSString*)objc_getAssociatedObject(self, Key);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |