我最近开始为 IOS 开发并与调用对象作斗争。
我拥有的是一个从 NSManagedObject 派生的“位置”类(它是 Coredata 模型的一部分)
@interface Location (CoreDataGeneratedAccessors)
- (void)addHasLocationInfoObject:(Info *)value;
...
@end
我还有其他具有类似签名的类(addHasWorkorderInfoObject,...)。
在这种情况下,这些 InfoObject 对其“父对象”有约束,“Location”有几个“LocationInfo”对象,我从数据库中检索并希望添加到 Location 中。同样的事情应该发生在所有分配了 InfoObjects 的对象上。
我现在正在尝试创建一种方法,该方法适用于任何遵守项目文档(位置 - > addHasLocationInfoObject,XY - > addHasXYInfoObject ...)固定的命名约定的对象。
我现在向对象添加信息的方法是:
-(void)setInfoForObject:(NSManagedObject *)managedObject withClass:(NSString *)className
NSString *noteRefName = [[NSString alloc]init];
noteRefName = [NSString stringWithFormat:@"%@Info", className];
NSString *addInfoSelectorName = [[NSString alloc]init];
addInfoSelectorName = [NSString stringWithFormat:@"addHas%@Object::", infoClassName];
SEL addInfoPropertySelector = NSSelectorFromString(addInfoSelectorName);
NSMethodSignature *signature = [[managedObject class] methodSignatureForSelector:addNotePropertySelector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:managedObject];
[invocation setSelector:addInfoPropertySelector];
[invocation setArgument:¬e atIndex:2];
然而,这给了我一个错误,因为 Signature 对象被设置为 nil。我尝试搜索问题,它似乎与选择器名称中的“:”有关。
但我不明白有多少、在哪里以及为什么我必须设置这些?我似乎也找不到告诉我如何正确执行此操作的文档页面。
任何帮助表示赞赏,在此先感谢!
PS。我记录了 SelectorName 和 Classname,它们都拼写正确。