-(DataModel *)createDataModel:(NSString *)dataModel_name {
DataModel *[initWithString:dataModel_name] = [[DataModel alloc] init];
}
我知道我有一些问题。对于初学者,我不知道如何定义名称可能更改的对象的返回。其次,我知道这不会编译,因为initWithString方法是错误的。我只是不知道该怎么做或使用什么方法,以便我可以用指定的名称创建这个DataModel对象...
答案 0 :(得分:2)
如果您的标题设置正确,则作为属性:
-(DataModel *)createDataModel:(NSString *)dataModel_name {
DataModel *model = [[DataModel alloc] init];
model.title = dataModel_name;
return model;
}
在datamodel.h中需要:
@interface DataModel {
NSString *title;
}
@property (nonatomic, retain) NSString *title;
@end
在你的.m:
@implementation DataModel
@synthesize title;
@end
但是你的问题不清楚你的真正目的是试图基于dataModel_name实例化不同的类,或者你是否只有一个通用类,其标题应该设置为dataModel_name。
根据您的目的,有不同的答案。如果你真的想要基于名称的不同类,那么你应该采取不同的方式。您可以使用Cocoa特定类型:id,从方法返回任何对象。然后是NSClassFromString()方法创建对象:
- (id)createDataModel:(NSString *)dataModel_name {
id model = [[NSClassFromString(dataModel_name) alloc] init];
[model setTitle:dataModel_name];
return model;
}
或者您可以定义一个声明数据模型功能的协议(Java中的接口)。你的方法会返回它。
答案 1 :(得分:1)
NSClassFromString()
会做你想要的。此外,最初将变量声明为类型id
允许您稍后设置其显式类型。所以:
id dataModel = [[NSClassFromString(dataModel_name) alloc] init];
答案 2 :(得分:0)
找到或创建一个新类:
Class arbitraryClass = NSClassFromString(dataModel_name);
if ( nil == arbitraryClass ) arbitraryClass = objc_allocateClassPair( [DataModel class] , [dataModel_name UTF8String] , 0 );
使用新创建的类创建对象的新实例:
DataModel *modelWithArbitratyClassName = [[arbitraryClass alloc] init];
在运行时创建新类通常不是一个好主意。
答案 3 :(得分:0)
因此,您似乎希望在运行时动态地将Instance变量添加到对象。你没有免费获得这个。 CALayer和CAAnimation可以做类似的事情,你可以read about it here
您可以使用键值编码为您自己的对象添加类似的功能,更具体地说,可以使用方法valueForUndefinedKey。会有一些KVC特定的警告,所以你应该确保你熟悉并理解KVC。 Take a look at this,可能只是想要你想要的。
字典用于存储值和键,并在您尝试访问时检索值。