0

我收到以下错误[context save:&error]。我应该如何解决?

无法识别的选择器发送到类 * -[NSKeyedArchiver dealloc]:警告:NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放。*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[TempObject encodeWithCoder:]: unrecognized selector sent to class”

这是我正在使用的代码。

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
PostRequest *postRequestObject = (PostRequest *)[NSEntityDescription   insertNewObjectForEntityForName:@"PostRequest" inManagedObjectContext:context];

DummyClass *request = OtherClassObject;
postRequestObject.request = request;
// request is attribute with type transformable
NSLog(@"requestpost data -> %@",postRequestObject.request);

NSError *error = nil;
if (![context save:&error]) {
    // Replace this implementation with code to handle the error appropriately.
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

#pragma mark - private method
- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PostRequest" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    [fetchRequest setFetchBatchSize:80];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"status" ascending:NO];
    NSArray *sortDescriptors = @[sortDescriptor];
    [sortDescriptor autorelease];

    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"root"] autorelease];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _fetchedResultsController;
}
4

1 回答 1

2

错误消息表明您有一个名为 的类TempObject,您正在尝试调用encodeWithCoder:它,并且该类没有实现该方法。如您所见,这是一个崩溃的错误。

似乎您在某处有一个可转换的核心数据属性,并且您正在TempObject为该属性分配一个实例。我不知道那在哪里。您的代码片段提到了一个可转换的属性,但您没有TempObject在代码中使用。我无法判断此代码​​是否实际上不是导致崩溃的原因,或者您是否出于某种原因手动更改了名称。

不管怎样,当你有一个可变形的属性时,你必须做以下两件事之一:

  1. 让你的类符合NSCoding. 你在评论中说你做了,但你的错误信息说你没有——或者至少,你没有完成工作。NSCoding定义了两个方法,initWithCoder:encodeWithCoder:,并且你的类必须同时实现它们。

  2. 创建一个自定义NSValueTransformer子类,可以将您的对象转换为/从NSData,并配置您的核心数据模型以使用它。Apple 提供了几个非常好的(但很简单)的例子来说明如何做到这一点。

您分配给可转换属性的任何内容都必须执行其中一项。哪一个取决于你。

看来您正在尝试做#1,但还没有完成工作确保您的课程符合NSCoding.

于 2013-08-06T20:48:19.167 回答