【问题标题】:iOS - "NSObjectFromString"--- building the name of an object from stringiOS - "NSObjectFromString"--- 从字符串构建对象的名称
【发布时间】:2012-10-15 16:28:17
【问题描述】:

我有几个想要使用的对象,例如 obj11、obj21、obj33 等。

要使用的正确对象的选择取决于用户定义的一些参数,例如:要使用的大小和对象的种类。

所以,对象名称上的第一个数字代表大小,第二个字母代表种类。如果用户选择对象大小 2 和对象种类 1,则要加载的对象将为“obj21”。

有没有办法根据对象的名称作为 NSString 引用对象?

类似

NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind];
["use object name" doSomething];

我需要类似 NSSelectorFromString 的东西,但在这种情况下,它会根据其名称运行一个方法。我需要的是“NSObjectFromString”之类的东西,它根据对象的名称作为字符串引用一个对象。

我该怎么做?谢谢。

【问题讨论】:

    标签: iphone ios ipad


    【解决方案1】:

    由于这是不可能的,最好将您的对象存储在 NSDictionary(或其可变副本)中,并使用您构建的字符串作为该对象的键。

    这是一个奇怪的例子:

    NSMutableDictionary *objectDict = [[NSMutableDictionary alloc] init];
    
    ... init your objects somehow ...
    
    // build your keys somehow and add the object to the dict
    int size = 1;
    int kind = 2;
    
    NSString *name = [NSString stringWithFormat:@"obj%d%d", size, kind];
    [objectDict addObject:obj12 forKey:name];
    
    ... Do some stuff ...
    
    // access your object and call a method
    id obj =  [objectDict objectForKey:name];
    [obj doSomething];
    

    【讨论】:

    【解决方案2】:

    你可以创建一个工厂方法并使用NSSelectorFromString动态调用它。

    更多细节在这里:

    https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html

    编辑:

    我对我认为是同一个问题的回答:

    id object = [[NSClassFromString(@"NameofClass") alloc] init];
    

    Create objective-c class instance by name?

    【讨论】:

    • 他想要一个现有的对象,而不是从一个字符串中创建一个新的对象。
    • 哦,我明白了,一个动态变量name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多