Swift:CoreData库中的断点 [英] Swift: Breakpoint in CoreData library
问题描述
XCode 6 Beta 3使用Swift。
XCode 6 Beta 3 using Swift.
在我的应用程序中,我使用CoreData。当我在模拟器中运行我的应用程序时,XCode弹出调试器的断点设置在CoreData库中的某个地方(见截图)。这发生在几个CoreData函数上,例如当插入新记录或从实体获取记录时。断点位置始终相同。
In my App I use CoreData. When I run my App in simulator, XCode pops up the debugger with a breakpoint set somewhere in the CoreData library (see screenshot). This happens on several CoreData functions, for example when inserting new records or fetching records from an entity. The breakpoint position is always the same.
这是非常讨厌。当我的应用程序从一个实体获取10条记录时,我必须按下继续执行程序按钮10次。
This is extremely annoying. When my App fetches 10 records from an entity I have to push the continue program execution button 10 times.
因为这个断点设置在某处机器代码,断点检查器不显示任何断点,所以我不能删除它。
Because this breakpoint is set somewhere in machine code, the breakpoint inspector does not show any breakpoints so I cannot delete it.
有人知道如何摆脱它吗?
Does anyone know how to get rid of it?
非常感谢。
编辑:
backtrace -output:
backtrace-output:
(lldb)bt
* thread#1:tid = 0x1d68b0,0x000000010a2f7fcd libswift_stdlib_core.dylibswift_dynamicCastClassUnconditional + 77,queue ='com.apple.main-thread',stop reason = EXC_BREAKPOINT(code = EXC_I386_BPT,subcode = 0x0)
swift_dynamicCastClassUnconditional + 77
* frame#0:0x000000010a2f7fcd libswift_stdlib_core.dylib
frame#1:0x000000010a0fbb85 GPS TrackGPS_Track.TrackListTableViewController.tableView(tableView =< unavailable>)(Swift.ImplicitlyUnwrappedOptional< ObjectiveC.UITableView> ;, cellForRowAtIndexPath:Swift.ImplicitlyUnwrappedOptional< ObjectiveC.NSIndexPath>) - > Swift.Optional< ObjectiveC.UITableViewCell> + 1125 at TrackListTableViewController.swift:53
@objc GPS_Track.TrackListTableViewController.tableView(GPS_Track.TrackListTableViewController)(Swift.ImplicitlyUnwrappedOptional,cellForRowAtIndexPath:Swift.ImplicitlyUnwrappedOptional) > Swift.Optional + 87在TrackListTableViewController.swift:0
frame#2:0x000000010a0fc937 GPS Track
frame#3:0x000000010bc2f218 UIKit- [UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 508
- [UITableView _updateVisibleCellsNow:isRecursive:] + 2845
frame#4:0x000000010bc0f340 UIKit
frame#5:0x000000010bc24fea UIKit- [UITableView layoutSubviews] + 213
- [UIView(CALayerDelegate)layoutSublayersOfLayer:] + 519
frame#6:0x000000010bbb1ebd UIKit
frame#7:0x000000010b9c9598 QuartzCore- [CALayer layoutSublayers] + 150
CA :: Layer :: layout_if_needed(CA :: Transaction *)+ 380
frame#8:0x000000010b9be1be QuartzCore
frame#9:0x000000010b9be02e QuartzCoreCA :: Layer :: layout_and_display_if_needed :Transaction *)+ 24
CA :: Context :: commit_transaction(CA :: Transaction *)+ 242
frame#10:0x000000010b92cf16 QuartzCore
frame#11:0x000000010b92e022 QuartzCoreCA :: Transaction :: commit()+ 390
CA :: Transaction :: observer_callback(__ CFRunLoopObserver *,unsigned long,void *) + 89
frame#12:0x000000010b92e68d QuartzCore
frame#13:0x000000010ab52927 CoreFoundation__ CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
__ CFRunLoopDoObservers + 368
frame#14:0x000000010ab52880 CoreFoundation
frame#15:0x000000010ab480d3 CoreFoundation__ CFRunLoopRun + 1123
CFRunLoopRunSpecific + 470
frame#16:0x000000010ab47a06 CoreFoundation
frame#17:0x000000010e9e9abf GraphicsServicesGSEventRunModal + 161
UIApplicationMain + 1282
frame#18:0x000000010bb39cf8 UIKit
frame#19:0x000000010a0e6a5d GPS Tracktop_level_code + 77 at AppDelegate.swift:36
main + 42在AppDelegate.swift:0
frame #20:0x000000010a0e6a9a GPS Track
frame#21:0x000000010d2e7145 libdyld.dylib`start + 1
(lldb)
(lldb) bt * thread #1: tid = 0x1d68b0, 0x000000010a2f7fcd libswift_stdlib_core.dylib
swift_dynamicCastClassUnconditional + 77, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0) * frame #0: 0x000000010a2f7fcd libswift_stdlib_core.dylib
swift_dynamicCastClassUnconditional + 77 frame #1: 0x000000010a0fbb85 GPS TrackGPS_Track.TrackListTableViewController.tableView (tableView=<unavailable>)(Swift.ImplicitlyUnwrappedOptional<ObjectiveC.UITableView>, cellForRowAtIndexPath : Swift.ImplicitlyUnwrappedOptional<ObjectiveC.NSIndexPath>) -> Swift.Optional<ObjectiveC.UITableViewCell> + 1125 at TrackListTableViewController.swift:53 frame #2: 0x000000010a0fc937 GPS Track
@objc GPS_Track.TrackListTableViewController.tableView (GPS_Track.TrackListTableViewController)(Swift.ImplicitlyUnwrappedOptional, cellForRowAtIndexPath : Swift.ImplicitlyUnwrappedOptional) -> Swift.Optional + 87 at TrackListTableViewController.swift:0 frame #3: 0x000000010bc2f218 UIKit-[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 508 frame #4: 0x000000010bc0f340 UIKit
-[UITableView _updateVisibleCellsNow:isRecursive:] + 2845 frame #5: 0x000000010bc24fea UIKit-[UITableView layoutSubviews] + 213 frame #6: 0x000000010bbb1ebd UIKit
-[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 519 frame #7: 0x000000010b9c9598 QuartzCore-[CALayer layoutSublayers] + 150 frame #8: 0x000000010b9be1be QuartzCore
CA::Layer::layout_if_needed(CA::Transaction*) + 380 frame #9: 0x000000010b9be02e QuartzCoreCA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24 frame #10: 0x000000010b92cf16 QuartzCore
CA::Context::commit_transaction(CA::Transaction*) + 242 frame #11: 0x000000010b92e022 QuartzCoreCA::Transaction::commit() + 390 frame #12: 0x000000010b92e68d QuartzCore
CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 89 frame #13: 0x000000010ab52927 CoreFoundation__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 frame #14: 0x000000010ab52880 CoreFoundation
__CFRunLoopDoObservers + 368 frame #15: 0x000000010ab480d3 CoreFoundation__CFRunLoopRun + 1123 frame #16: 0x000000010ab47a06 CoreFoundation
CFRunLoopRunSpecific + 470 frame #17: 0x000000010e9e9abf GraphicsServicesGSEventRunModal + 161 frame #18: 0x000000010bb39cf8 UIKit
UIApplicationMain + 1282 frame #19: 0x000000010a0e6a5d GPS Tracktop_level_code + 77 at AppDelegate.swift:36 frame #20: 0x000000010a0e6a9a GPS Track
main + 42 at AppDelegate.swift:0 frame #21: 0x000000010d2e7145 libdyld.dylib`start + 1 (lldb)
推荐答案
我进一步跟踪:问题只出现在为实体使用自定义对象类。示例:
I tracked it down further: The problem only occurs when using custom object classes for the entities. Example:
// User class, defined in User.swift
class User: NSManagedObject {
@NSManaged var name: String
@NSManaged var firstname: String
}
// --------------
// code somewhere else
let users = moc.executeFetchRequest(fetchRequest, error: &error)
for object in users {
let user = object as User // <-- breakpoint fired here
println(user.name)
}
}
解决方案:
SOLUTION:
需要创建自定义对象类对象Objective C使用@objc指令可见:
One need to make the custom object class visible to Objective C using the @objc directive:
// User class, defined in User.swift
@objc(User) // <-- required!
class User: NSManagedObject {
@NSManaged var name: String
@NSManaged var firstname: String
}
感谢您的帮助!
这篇关于Swift:CoreData库中的断点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!