【问题标题】:Creating dictionary with custom class object使用自定义类对象创建字典
【发布时间】:2014-08-30 21:12:23
【问题描述】:

我有自定义课程。我想将类型为 NSDictionary 的此类属性添加到此类属性中,该属性将通过给定标记返回此类的属性。但我做不到。有没有可能?我有错误:

  [__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'

代码:

@interface Car : NSObject
@property (nonatomic, strong) NSNumber *topic;  
@property (nonatomic, strong) NSNumber *car;  
@property (nonatomic, strong) NSDictionary *variables;
@end

@implementation Car
- (NSDictionary *)variables
{
return @{
         @"781" : _topic, 
         @"782" : _car,  
}};
@end

【问题讨论】:

  • 您可能需要考虑将variables 设为只读属性,或者更好的是,只是一个普通的旧方法。
  • @jlehr 虽然我同意,但this answer 似乎暗示这可能无关紧要。

标签: ios objective-c nsdictionary nsobject


【解决方案1】:

您收到此错误是因为您试图将 nil(可能是未初始化/未分配的对象)插入到无法完成的 Objective-C 集合中。如果需要在 Objective-C 集合中表示 nil,则需要使用 [NSNull null]


根据您添加的代码,问题在于您尚未初始化变量。

其他地方有问题,您需要在某些时候将它们初始化为某些东西(可能在init?),但要确保错误不再发生,您可以这样做:

- (NSDictionary *)variables {
    return @{
        @"781" : _topic ?: [NSNull null], 
        @"782" : _car ?: [NSNull null],  
    }
};

【讨论】:

  • nhgrif,谢谢,如何返回此类实例的变量_topic的值?
  • 返回变量_topic的值,其中nil(潜在值)表示为NSNull对象。如果你得到 NSNull 对象,那么你还没有初始化 _topic 并且它没有任何价值......
猜你喜欢
  • 2016-08-15
  • 2011-10-23
  • 1970-01-01
  • 2015-11-15
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多