【问题标题】:NSDictionary with key => String and Value => c-Style arrayNSDictionary with key => String and Value => c-Style array
【发布时间】:2010-04-17 06:44:27
【问题描述】:

我需要一个 NSDictionary,它具有字符串形式的键 (@"key1", @"key2") 和 C 样式二维数组 (valueArray1,valueArray2) 形式的值,其中 valueArray1 定义为:

int valueArray1[8][3] = { {25,10,65},{50,30,75},{60,45,80},{75,60,10},
                          {10,70,80},{90,30,80},{20,15,90},{20,20,15} };

valueArray2 也一样。

我的目标是给定一个 NSString,我需要获取相应的二维数组。 我想使用 NSArray 而不是 c 样式的数组会起作用,但是我无法像上面那样初始化数组(我有很多这样的数组)。但是,如果这是可行的,请告诉我如何操作。

目前以下给出警告“从不兼容的指针类型传递 'dictionaryWithObjectsAndKeys:' 的参数 1”:

NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:valueArray1,@"key1",
                    valueArray2,@"key2",nil];

【问题讨论】:

    标签: iphone objective-c nsdictionary


    【解决方案1】:

    valueArray2 也是int[][3] 吗?如果是这样,你可以使用

    [NSValue valueWithPointer:valueArray1]
    

    将数组转换为 ObjC 值。要检索内容,您需要使用

    void* valuePtr = [[myDict objectForKey:@"key1"] pointerValue];
    int(*valueArr)[3] = valuePtr;
    // use valueArr as valueArrayX.
    

    如果只有 2 个键,那么使用类似的函数会更高效

    int(*getMyValueArr(NSString* key))[3] {
        if ([key isEqualToString:@"key1"]) return valueArray1;
        else return valueArray2;
    }
    

    【讨论】:

      【解决方案2】:

      而不是将数组直接添加为 NSDictionary 中的值,而是创建一个自定义类,在其中创建 NSArray 的变量...并将此类对象设置为类似的值

      NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:MyClassObj1,@"key1",
                          MyClassObj2,@"key2",nil];
      

      其中 MyClassObj1 和 MyClassObj2 是 MyClass 的成员

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 2016-05-10
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 2015-06-15
        相关资源
        最近更新 更多