0

Mantle と Core Data を使用して reddit 用のクライアントを構築しようとしていますが、*** Caught exception setting key "upvotes" : [<Thread 0x14c61ba10> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key upvotes.スローされ続け、何が問題なのかわかりません...

私はマントルのドキュメントから何かを逃したとは思わない.

スレッド + CoreDataProperties.h

#import "Thread.h"

NS_ASSUME_NONNULL_BEGIN

@interface Thread (CoreDataProperties)

@property (nullable, nonatomic, retain) NSString *approvedBy;
@property (nullable, nonatomic, retain) NSNumber *isArchived;
@property (nullable, nonatomic, retain) NSString *author;
@property (nullable, nonatomic, retain) NSString *title;
@property (nullable, nonatomic, retain) NSDate *createdDate;
@property (nullable, nonatomic, retain) NSString *subreddit;
@property (nullable, nonatomic, retain) NSString *domain;
@property (nullable, nonatomic, retain) NSNumber *upvotes;

@end

NS_ASSUME_NONNULL_END

スレッド + CoreDataProperties.m

#import "Thread+CoreDataProperties.h"

@implementation Thread (CoreDataProperties)

@dynamic approvedBy;
@dynamic isArchived;
@dynamic author;
@dynamic title;
@dynamic createdDate;
@dynamic subreddit;
@dynamic domain;
@dynamic upvotes;

@end

Thread.h

@import Foundation;
@import CoreData;
@import Mantle;
@import MTLManagedObjectAdapter;

NS_ASSUME_NONNULL_BEGIN

@interface Thread : MTLModel <MTLJSONSerializing, MTLManagedObjectSerializing>

// Insert code here to declare functionality of your managed object subclass

@end

NS_ASSUME_NONNULL_END

#import "Thread+CoreDataProperties.h"

スレッド.m

#import "Thread.h"
#import <Mantle/MTLValueTransformer.h>

@implementation Thread

#pragma mark MTLManagedObjectSerializing Protocols

+ (NSString *)managedObjectEntityName
{
    return @"Thread";
}

+ (NSDictionary *)managedObjectKeysByPropertyKey
{
    return @{
             @"approvedBy": @"approvedBy",
             @"isArchived": @"isArchived",
             @"author": @"author",
             @"title": @"title",
             @"createdDate": @"createdDate",
             @"subreddit": @"subreddit",
             @"domain": @"domain",
             @"upvotes": @"upvotes"
             };
}

+ (NSSet *)propertyKeysForManagedObjectUniquing {
    return [NSSet setWithObjects:@"approvedBy",@"isArchived",@"author",@"title",@"createdDate",@"subreddit",@"domain",@"upvotes", nil];
}

#pragma mark MTLJSONSerializing Protocols

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
             @"approvedBy": @"approved_by",
             @"isArchived": @"archived",
//             @"author": @"author",
//             @"title": @"title",
             @"createdDate": @"created",
//             @"subreddit": @"subreddit",
//             @"domain": @"domain",
             @"upvotes": @"ups"
             };
}

+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key {
    if ([key isEqualToString:@"createdDate"]) {
        return [Thread dateJSONTransformer];
    }

    return nil;
}

+ (NSValueTransformer *)dateJSONTransformer {
    return [MTLValueTransformer transformerUsingForwardBlock:^id(NSNumber *unixTimestamp, BOOL *success, NSError *__autoreleasing *error) {
        return [NSDate dateWithTimeIntervalSince1970:unixTimestamp.doubleValue];
    } reverseBlock:^id(NSDate *date, BOOL *success, NSError *__autoreleasing *error) {
        return [NSNumber numberWithDouble:[date timeIntervalSince1970]];
    }];
}

@end
4

1 に答える 1