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.抛出,我无法弄清楚出了什么问题......

我认为我没有错过 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
4

1 回答 1

0

我看不出您的Thread类声明与NSManagedObject. 您已将其重新声明为MTLModel,它是 的子类NSObject。当然,它没有upvotes或任何其他在CoreDataProperties类别中定义的属性,因为这些属性是动态的,并且不会有 Core Data 运行时支持来为它们提供实现。

您应该撤消对 的更改Thread.h,或者只是删除这四个文件并使用 Xcode 重新创建它们。

关于 Mantle:我不认为它直接支持 Core Data。见这里

于 2015-12-26T16:36:05.227 回答