我正在尝试使用 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.
抛出,我无法弄清楚出了什么问题......
我认为我没有错过 Mantle 文档中的任何内容。
线程+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
线程.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