代码之家  ›  专栏  ›  技术社区  ›  4thSpace wkw

将nsinteger变量传递给nsmutabledictionary或nsmutablerray

  •  39
  • 4thSpace wkw  · 技术社区  · 15 年前

    为什么这不起作用:

    NSInteger temp = 20;
    [userSettingsFromFile setObject:temp forKey:@"aTemp"];
    

    但这确实是:

    [userSettingsFromFile setObject:@"someObject" forKey:@"aTemp"];
    

    我怎么用 NSInteger 变量?

    7 回复  |  直到 8 年前
        1
  •  91
  •   Alex Cio Olie    10 年前

    NSInteger 不是一个对象--它只是被类型转换为 int 在32位或 long 在64位。自从 NSDictionary 只能存储对象,您需要先将整数包装成一个对象,然后才能存储它。试试这个:

    NSInteger temp = 20;
    [userSettingsFromFile setObject:[NSNumber numberWithInteger:temp] 
                             forKey:@"aTemp"]; 
    
        2
  •  5
  •   dreamlax    15 年前

    为了在集合中存储数字,必须将其包装在 NSNumber 实例。

    double aDouble = 20.3d;
    NSInteger anInt = 20;
    
    NSNumber *aWrappedDouble = [NSNumber numberWithDouble:aDouble];
    NSNumber *aWrappedInt = [NSNumber numberWithInteger:anInt];
    
    NSArray *anArray = [NSArray arrayWithObjects:aWrappedDouble, aWrappedInt, nil];
    
        3
  •  2
  •   Venk    11 年前

    通过setObject传递的任何内容都必须派生自 NSObject . NSInteger 不是,它是一个简单的int typedef。在第二个示例中,您使用 NSString ,其派生自 NSO对象 .

        4
  •  0
  •   PeyloW    15 年前

    更正:无论通过什么 setObject: 不必从 NSObject 类,但它必须符合 NSO对象 协议,定义 retain release .

    它可能会混淆,但类和协议具有不同的名称空间。有一个类和一个协议 NSO对象 ,这个班 NSO对象 符合协议 NSO对象 . 还有一个根类 NSProxy 类也符合 NSO对象 协议。

    这一点很重要,因为否则代理不能在集合和自动发布池中使用,而仍然具有轻型代理根类。

        5
  •  0
  •   Durai Amuthan.H    11 年前

    nsinteger是long integer的同义词。以下是nsinteger的定义方式:

    #if __LP64__ || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
    #else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
    #endif
    

    nsnumber是一个objective-c类,是nsvalue的一个子类。可以从有符号或无符号char、short int、int、long int、long long int、float、double或bool创建nsnumber对象

    其中一个主要区别是可以在集合中使用nsnumber,例如需要对象的nsarray。例如,如果需要向NSarray中添加一个float,首先需要从float创建一个nsnumber对象:

    float percentage = 40.5;
    

    … //创建nsnumber对象,该对象现在可以插入到nsarray中

    NSNumber *percentageObject = [NSNumber numberWithFloat:percentage];
    
        6
  •  0
  •   Umit Kaya    8 年前

    引用@matt ball的答案:nsinteger不是一个对象——它只是在32位上类型化为int,在64位上类型化为long。因为nsdictionary只能存储对象,所以需要先将整数包装成一个对象,然后才能存储它。

    所以,万一 迅捷 ,这是您的方法:

    let temp:NSInteger = yourInteger.hashValue
    
        7
  •  -1
  •   bob    9 年前

    只需使用: $(variable) 将基元类型转换为对象的语法。