Создание массива из класса NSObject - PullRequest
0 голосов
/ 06 июня 2018

У меня есть вызов класса NSObject Details, который содержит 3 свойства.

 @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};
}

В другом вызове класса Запрос класса я хотел бысоздать массив для хранения свойств класса 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;
}

Но я не могу получить свойства этого класса в виде массива ... Чего мне здесь не хватает?Любая помощь будет идеальной!Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2018
 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'

означает, что вы создаете словарь с нулем.objects [0] означает, что ваш первый объект - ноль.поэтому я предполагаю, что когда вы создаете словарь этим.

- (NSDictionary *)getMappedDictionary {
     return @{ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : _details};
}

ObjectOrNull([self getImageBase64]) возвращает ноль.

0 голосов
/ 06 июня 2018

Из комментариев кажется, что на самом деле проблема заключается в попытке вставить нулевой объект в словарь:

'*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нольобъект из объектов [0]

Предоставленный код будет указывать на getMappedActionDetails, который, скорее всего, вставляет объект nil.Предполагая, что ObjectOrNull делает то, что подразумевается, я бы поспорил, что в одной из ваших моделей _details свойство равно nil.Возможно исправление:

- (NSDictionary *)getMappedDictionary {
    return @{ImageKey : ObjectOrNull([self getImageBase64]), NumberKey : @(_number), DetailKey : ObjectOrNull(_details)};
}

Я также предлагаю использовать точки останова исключения , чтобы получить точное местоположение аварии.

...