从 NSObject 创建数组 Class
Creating an Array from NSObject Class
我有一个包含 3 个属性的 NSObject class 调用详细信息。
@interface Details : NSObject
@property (nonatomic, nonnull, strong) UIImage *image;
@property (nonatomic, assign) NSInteger number;
@property (nonatomic, nonnull, strong) NSString *details;
- (NSDictionary *_Nonnull)getMappedDictionary; @end
而这个 class 的实现是
@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};
}
在另一个 class 调用请求 Class 中,我想创建一个数组来保存详细信息 class 的属性(图像、数字、详细信息)
- (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;
}
但我无法将此 class 的属性作为数组...我在这里缺少什么?任何帮助都是完美的!谢谢
从评论看来,问题实际上是试图将一个 nil 对象插入字典:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]:
attempt to insert nil object from objects[0]
提供的代码将指向 getMappedActionDetails
,这很可能是插入一个 nil
对象。假设 ObjectOrNull
做了它暗示的事情,我敢打赌在你的一个模型中 _details
属性 是 nil
。也许解决方法是:
- (NSDictionary *)getMappedDictionary {
return @{ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : ObjectOrNull(_details)};
}
我还建议使用 exception breakpoints 来获取崩溃的确切位置。
-[__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])
return 零。
我有一个包含 3 个属性的 NSObject class 调用详细信息。
@interface Details : NSObject
@property (nonatomic, nonnull, strong) UIImage *image;
@property (nonatomic, assign) NSInteger number;
@property (nonatomic, nonnull, strong) NSString *details;
- (NSDictionary *_Nonnull)getMappedDictionary; @end
而这个 class 的实现是
@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};
}
在另一个 class 调用请求 Class 中,我想创建一个数组来保存详细信息 class 的属性(图像、数字、详细信息)
- (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;
}
但我无法将此 class 的属性作为数组...我在这里缺少什么?任何帮助都是完美的!谢谢
从评论看来,问题实际上是试图将一个 nil 对象插入字典:
'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
提供的代码将指向 getMappedActionDetails
,这很可能是插入一个 nil
对象。假设 ObjectOrNull
做了它暗示的事情,我敢打赌在你的一个模型中 _details
属性 是 nil
。也许解决方法是:
- (NSDictionary *)getMappedDictionary {
return @{ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : ObjectOrNull(_details)};
}
我还建议使用 exception breakpoints 来获取崩溃的确切位置。
-[__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])
return 零。