【问题标题】:creating an object out of multiple variable types从多个变量类型中创建一个对象
【发布时间】:2012-08-10 04:42:23
【问题描述】:

我有一个 NSDictionary,我将它传递给一个 NSObject 类,在那里我将所有值从字典中提取出来,并将它们传递给正确的类型。

例如 NSInteger、BOOL、NSString、char 是我从 NSDictionary 中提取并放入它们唯一变量的值的类型。

我的问题是将这些值变成一个大对象然后可以放入数组中的最佳方法是什么?

我听说我可以将类本身用作对象。但我不确定如何做到这一点。

或者我可以将它们放回 NSDictionary 吗?...但如果是这种情况,NSDictionaries 是否允许多种值类型?

【问题讨论】:

  • 如果您知道元素的数量和种类将保持不变,请将您的键设置为静态 NSString 以便于访问。
  • 我会这样做,但我需要将它们放入正确的值类型中,因为我必须使用 NSStrings 和 NSInteger 值进行排序。

标签: iphone ios nsdictionary nsobject


【解决方案1】:

其实,你是在正确的道路上。这基本上是MVC architecture 方式。所以你在质疑 M = Model。

此处示例中的模型是定义所有变量的类。切入正题,你应该这样做:

-> 创建一个包含您的变量的类,使用 @property@synthesize 名称:ClassA。

然后您可以将对象 ClassA 设置为字典。

ClassA *myClass = [[ClassA alloc] init];
myClass.myString = @"test String";
myClass.myBoolean = True;

[dictionary setObject:myClass forKey:@"myObject"];
[myClass release]; //we no longer need the object because already retain in dictionary.

然后通过以下方式检索它:

ClassA *myClass = (ClassA*)[dictionary objectForKey:@"myObject"];
NSLog(@"this is value of myString : %@ & boolean : %i",myClass.myString,myClass.myBoolean);

【讨论】:

  • 啊啊啊!!这就是我所读到的,我只是无法将它正确地内化在我的脑海中!非常感谢您的帮助!! :) 所以如果你把不同的变量类型放入 NSDictionary 的不同条目中就可以了吗?
  • 你可以放入不同的类型,但它们必须是对象——所以没有 bool 或 char
  • 这真的有效吗?您的意思是要将 ClassA 放入字典而不是 myClass 吗?
  • 实际上我正在使用我认为可能在 NSDictionary 中工作的 const char * 女巫,我认为我可以将 BOOL 更改为其中一个 int bool 东西......我需要阅读它。
  • 我不知道你所说的“int bool thingies”是什么意思。您可以做的是使用 NSNumber 的 numberWithBool: 将 BOOL 包装在对象中
【解决方案2】:

您可以将值的集合放在 NSDictionary、NSArray、NSMutableArray 等任何集合类型中。或者,如果您有固定数量的值/类型,则可以创建一个类,该类具有每个值/类型的数据成员并将其放入其中。类解决方案将无需进行大量转换,但它也仅在存在固定数量的值/类型时才有效。

这里是AppleDoc on collections

【讨论】:

    【解决方案3】:

    是的,您可以创建一个 class 本身,并将这些作为 properties 的不同值。一旦将此对象传递给任何类,您就可以通过 obj.propertyName。由此 Lead 以 MVC 模式创建 Modal。 如有疑问请告诉我。

     Test *object = [[Test alloc] init];
    object.testBool=true;
    object.testString=@"Test";
    NSDictionary *passData = [[NSDictionary alloc] initWithObjectsAndKeys:object,@"testObject", nil];
    Test *getObject = (Test*)[passData objectForKey:@"testObject"];
    NSLog(@"%d",getObject.testBool);
    NSLog(@"%@",getObject.testString);
    

    您可以自定义Test Class的init方法。

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多