gpt4 book ai didi

iphone - [CFNumber 发布] : message sent to deallocated instance

转载 作者:可可西里 更新时间:2023-11-01 04:06:03 25 4
gpt4 key购买 nike

当我从 History Core Data 对象记录/请求值时,下面的代码返回以下错误:

-[CFNumber release]: message sent to deallocated instance 0x17ea2a90

我最初认为是其他地方存在问题,并花了无数小时尝试调试它,但没有成功。经过进一步测试,我已将崩溃确定为从 History Core Data 对象请求某些值。任何人都可以看到为什么要释放对象值的任何问题吗?

    [[DocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) {

if(!self.document) {
self.document = document;
}

__block NSString *identifier = [[NSUserDefaults standardUserDefaults] objectForKey:kUserDefaultsUserIdentifier];

[self.document.managedObjectContext performBlock:^{

// Create history object
History *history = [NSEntityDescription insertNewObjectForEntityForName:@"History"
inManagedObjectContext:self.document.managedObjectContext];
history.identifier = identifier;
history.followers = [NSNumber numberWithInteger:53];
history.following = [NSNumber numberWithInteger:53];
history.newFollowers = [NSNumber numberWithInteger:53];
history.unfollowers = [NSNumber numberWithInteger:53];
history.fans = [NSNumber numberWithInteger:53];
history.mutualFriends = [NSNumber numberWithInteger:53];
history.nonFollowers = [NSNumber numberWithInteger:53];

[self.document saveToURL:self.document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {

// Fetch previous records
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"History"];
request.predicate
= [NSPredicate predicateWithFormat:@"identifier == %@", identifier];

NSError *error = nil;

NSArray *records = [self.document.managedObjectContext executeFetchRequest:request error:&error];

[records enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@", [(History *)obj newFollowers]); // Crash takes place here
}];

}];

}];

}];

启用异常断点的更多日志:

    (lldb) bt
* thread #1: tid = 0x28b70, 0x3b5787fa libobjc.A.dylib`objc_release + 10, queue = 'com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=1, address=0x10)
frame #0: 0x3b5787fa libobjc.A.dylib`objc_release + 10
frame #1: 0x3b578022 libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 358
frame #2: 0x311b4298 CoreFoundation`_CFAutoreleasePoolPop + 16
frame #3: 0x3127533e CoreFoundation`__NSArrayEnumerate + 614
frame #4: 0x31216012 CoreFoundation`-[NSArray enumerateObjectsWithOptions:usingBlock:] + 62
frame #5: 0x000eae26 Twitter Followers`__71-[MainViewController updateCurrentRecordAndTableHeaderForUpdateAction:]_block_invoke_2(.block_descriptor=0x15e58080, success='\x01') + 678 at MainViewController.m:671
frame #6: 0x3ba65bea libdispatch.dylib`_dispatch_barrier_sync_f_slow_invoke + 66
frame #7: 0x3ba600ee libdispatch.dylib`_dispatch_client_callout + 22
frame #8: 0x3ba629a8 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 268
frame #9: 0x3124b5b8 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
frame #10: 0x31249e84 CoreFoundation`__CFRunLoopRun + 1308
frame #11: 0x311b4540 CoreFoundation`CFRunLoopRunSpecific + 524
frame #12: 0x311b4322 CoreFoundation`CFRunLoopRunInMode + 106
frame #13: 0x35eeb2ea GraphicsServices`GSEventRunModal + 138
frame #14: 0x33a6b1e4 UIKit`UIApplicationMain + 1136

最佳答案

根据Transitioning to ARC Release Notes :

To allow interoperation with manual retain-release code, ARC imposes a constraint on method naming:

  • You cannot give an accessor a name that begins with new. This in turn means that you can’t, for example, declare a property whose name begins with new unless you specify a different getter:

        // Won't work:
    @property NSString *newTitle;

    // Works:
    @property (getter=theNewTitle) NSString *newTitle;

最重要的是,假定以new 开头的方法返回一个ARC 负责管理和释放的对象(但这里不是这种情况)。我建议只更改您的属性,使其不以 new 开头,以避免混淆。

关于iphone - [CFNumber 发布] : message sent to deallocated instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19469933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com