从 NSObject 类创建一个数组
Posted
技术标签:
【中文标题】从 NSObject 类创建一个数组【英文标题】:Creating an Array from NSObject Class 【发布时间】:2018-06-06 08:10:39 【问题描述】:我有一个包含 3 个属性的 NSObject 类调用 Details。
@interface Details : NSObject
@property (nonatomic, nonnull, strong) UIImage *image;
@property (nonatomic, assign) NSInteger number;
@property (nonatomic, nonnull, strong) NSString *details;
- (NSDictionary *_Nonnull)getMappedDictionary; @end
这个类的实现是
@interface Details()
@property (nonatomic, nonnull) NSString *imageFormat;
@property (nonatomic, nonnull) NSData *imageData;
@end
@implementation Details
- (instancetype)init
if (self = [super init])
_imageFormat = @"jpg";
return self;
- (NSData *)imageData
if (!_imageData)
_imageData = UIImageJPEGRepresentation(self.image, 1.0);
return _imageData;
- (NSInteger)number
return _number;
- (NSString *)details
return _details;
- (NSString *)getImageBase64
NSString *base64String = @"";
base64String = [self.imageData base64EncodedStringWithOptions:kNilOptions];
return base64String;
static id ObjectOrNull(id object)
return object ?: [NSNull null];
- (NSDictionary *)getMappedDictionary
return @ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : _details;
在另一个类调用请求类中,我想创建一个数组来保存详细信息类的属性(图像、数字、详细信息)
- (NSMutableSet<Details *> *)details
if (!_details)
_details = [NSMutableSet new];
return _dDetails;
- (NSArray *)getMappedActionDetails
NSMutableArray *details = [NSMutableArray new];
for (Details *detail in self.details)
[details addObject:[detail getMappedDictionary]];
return details;
但我不能将此类的属性作为数组...我在这里缺少什么?任何帮助都是完美的!谢谢
【问题讨论】:
但是问题是什么?这一切对我来说都很好。 原因:'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从 objects[0] 插入 nil 对象'。这就是我不断得到的我不能进入这个[details addObject:[actionDetail getMappedDictionary]];
@MaticOblak
【参考方案1】:
-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'
表示你用 nil 创建一个字典。 objects[0] 表示您的第一个对象为零。 所以我猜当你通过这个创建字典时。
- (NSDictionary *)getMappedDictionary
return @ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : _details;
ObjectOrNull([self getImageBase64])
返回零。
【讨论】:
是的,我修复了该部分,现在没有崩溃,但仍然无法创建 nsarray。当我在 Request 类中调用时,来自 Detail 类的 getMappedDictionary 方法没有显示任何内容,它一直为零。 @MaticOblak 是不是因为Request
类中的details
属性为空?所以当你打电话给for (Details *detail in self.details) [details addObject:[detail getMappedDictionary]];
。 self.details 是一个空集。【参考方案2】:
从 cmets 看来,问题实际上是试图将 nil 对象插入字典:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试从 objects[0] 中插入 nil 对象
提供的代码将指向getMappedActionDetails
,它很可能插入了nil
对象。假设ObjectOrNull
做了它所暗示的事情,我敢打赌,在你的一个模型中_details
属性是nil
。也许解决方法是:
- (NSDictionary *)getMappedDictionary
return @ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : ObjectOrNull(_details);
我还建议使用exception breakpoints 来获取崩溃的确切位置。
【讨论】:
以上是关于从 NSObject 类创建一个数组的主要内容,如果未能解决你的问题,请参考以下文章
如何从 iOS 中的 NSObject 类导航到 ViewController?
从 NSObject 类更新 UITabBarController 栏项目