Поскольку файлы .m для классов фундамента (например, для NSString) недоступны, я думал, могу ли я объявить расширение внутри файла .m категории, объявленной в том же классе. Мне удалось создать частный метод, который не использует переменную экземпляра внутри. Но когда я попытался получить доступ к iVar, объявленному внутри интерфейса, это вызвало проблемы.
* У этой цели не было цели, она просто пыталась что-то делать.Расширение для класса Foundation
Что я сделал объявить категорию на NSString
:
NSString + TestInterface.h
@interface NSString (TestInterface)
@end
NSString + TestInterface.m
@interface NSString() {
NSString *myVar;
}
@property (strong) NSString *myVar;
-(void)myPrivateMethod;
@end
@implementation NSString (TestInterface)
-(void)myPrivateMethod{
[email protected]"random";
// [self setValue:@"check" forKey:@"myVar"];
NSLog(@"Private %@",myVar);
// NSLog(@"Private %@",[self valueForKey:@"myVar"]);
}
@end
Когда я это делаю таким образом, я получаю следующую ошибку компилятора:
Undefined symbols for architecture x86_64:
"_OBJC_IVAR_$_NSString.myVar", referenced from: -[NSString(TestInterface) myPrivateMethod] in NSSTring+TestInterface.o ld: symbol(s) not found for architecture x86_64
Может кто-нибудь сказать мне, что происходит?
Хорошо. Но почему 'setValue: ForKey:' выдает исключение, а 'valueForKey:' делает? – Rakesh
@Rakesh IDK. Я только что попробовал, и для меня это вызвало исключение. –
Могла быть моей небрежностью, она бросает и меня. Благодарю. – Rakesh