我们的一位客户有时会在粘贴时看到这样的崩溃:
0 com.apple.Foundation 0x9143bd1d readPointerAt + 9
1 com.apple.Foundation 0x9153221f empty + 43
2 com.apple.Foundation 0x9145d41f dealloc + 21
3 com.apple.Foundation 0x9145d3ce -[NSConcreteMapTable dealloc] + 35
4 com.apple.AppKit 0x9092aa5d -[_NSPasteboardOwnersCollection dealloc] + 45
5 com.apple.AppKit 0x905cdb8f _NSPasteboardReportChangedOwner + 66
6 com.apple.AppKit 0x905cd4aa -[NSPasteboard _updateTypeCacheIfNeeded] + 51
7 com.apple.AppKit 0x905cd361 -[NSPasteboard _typesAtIndex:usesPboardTypes:] + 52
8 com.apple.AppKit 0x905cd327 -[NSPasteboard types] + 50
有谁知道可能导致这种情况的原因?
来自Does NSPasteboard retain owner objects?的更多信息表明是的,粘贴板保留了传递给它的所有者。因此,此崩溃必须是:
NSPasteboard
管理跨应用程序粘贴的方式出错并崩溃。任何人遇到类似的事情或知道可能导致什么?答案 0 :(得分:0)
这似乎是在处理有关前一个所有者的信息时(在当前所有者之前,由用户的最新副本设置)。也许就是你呢?检查您的复制代码。
如果你还没有在Zombies乐器下运行你的应用程序。
答案 1 :(得分:-1)
如果接受拖动粘贴的删除并在另一个线程中异步执行实际工作,则应保留粘贴板本身,否则,当主线程中的函数返回时,它可能会被释放。
它可能发生在拖动源端。
例如:
- (BOOL) outlineView:(NSOutlineView*)inOutlineView acceptDrop:(id<NSDraggingInfo>)inInfo item:(id)inItem childIndex:(NSInteger)inIndex
{
NSPasteboard* pboard = [[inInfo draggingPasteboard] retain]; // This is necessary!
BOOL result = YES;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^()
{
// Do the real work hear:
NSLog(@"types = %@", [pboard types]);
[pboard release];
});
return result;
}