Ios EXC\u错误\u访问内核\u闭包内地址无效\u
我写这个课程是为了跟踪设备的加速度Ios EXC\u错误\u访问内核\u闭包内地址无效\u,ios,swift,crash,exc-bad-access,Ios,Swift,Crash,Exc Bad Access,我写这个课程是为了跟踪设备的加速度 import CoreMotion import Foundation protocol MotionManagerDelegate { func didReceiveAcceleration(_ acceleration: (x: Double, y: Double, z: Double)) } class MotionManager: NSObject { var delegate: MotionManagerDelegate?
import CoreMotion
import Foundation
protocol MotionManagerDelegate {
func didReceiveAcceleration(_ acceleration: (x: Double, y: Double, z: Double))
}
class MotionManager: NSObject {
var delegate: MotionManagerDelegate?
fileprivate let motionDetector = SOMotionDetector.sharedInstance()
fileprivate let accelerationCaptureInterval: TimeInterval = 0.02
fileprivate let gyroCaptureInterval: TimeInterval = 1
fileprivate var isMoving: Bool = false
fileprivate var motionManager: CMMotionManager!
override init() {
super.init()
motionManager = CMMotionManager()
motionManager.gyroUpdateInterval = gyroCaptureInterval
motionManager.accelerometerUpdateInterval = accelerationCaptureInterval
motionManager.deviceMotionUpdateInterval = gyroCaptureInterval
}
func startCapturing() throws {
// ...
motionManager.startAccelerometerUpdates(to: OperationQueue()) { accelerometerData, error in
var x = 0.0
var y = 0.0
var z = 0.0
if let acceleration = accelerometerData?.acceleration {
x = acceleration.x
y = acceleration.y
z = acceleration.z
}
if self.isMoving {
self.delegate?.didReceiveAcceleration((x: x, y: y, z: z)) // line 77
}
}
// ...
}
func stopCapturing() {
motionManager.stopGyroUpdates()
motionManager.stopAccelerometerUpdates()
motionManager.stopDeviceMotionUpdates()
}
}
这种方法99%的时间都有效。但偶尔会发生以下崩溃
崩溃:NSOperationQueue 0x170a20e40::NSOperation 0x17084e8e0(QOS:
默认)EXC\u错误\u访问内核\u无效\u地址0x0000000000000000
它是随机发生的,所以很难用Xcode调试它。我添加了Crashlytics并得到了崩溃报告
# OS Version: 10.2.1 (14D27)
# Device: iPhone 7
# RAM Free: 30.5%
# Disk Free: 93.6%
#14. Crashed: NSOperationQueue 0x170a20e40 :: NSOperation 0x17084e8e0 (QOS: DEFAULT)
0 libswiftCore.dylib 0x10142c398 _swift_release_dealloc + 4
1 CycleSourcing (Alpha) 0x1000e3294 specialized Array._copyToNewBuffer(oldCount : Int) -> () + 4295979668
2 CycleSourcing (Alpha) 0x1000e2f08 BumpDetectorAlgorithm.detectStop(withAcceleration : (x : Double, y : Double, z : Double)) -> () (BumpDetectorAlgorithm.swift)
3 CycleSourcing (Alpha) 0x1000d0b18 protocol witness for MotionManagerDelegate.didReceiveAcceleration(x : Double, y : Double, z : Double) -> () in conformance DashboardViewController (DashboardViewController.swift)
4 CycleSourcing (Alpha) 0x1000eb7e8 specialized MotionManager.(startCapturing() throws -> ()).(closure #3) (MotionManager.swift:77)
5 CycleSourcing (Alpha) 0x1000eb4a8 partial apply for MotionManager.(startCapturing() throws -> ()).(closure #1) + 4296012968
6 Foundation 0x1845e3fb0 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
7 Foundation 0x184528aa8 -[NSBlockOperation main] + 96
8 Foundation 0x1845190a4 -[__NSOperationInternal _start:] + 620
9 Foundation 0x1845e635c __NSOQSchedule_f + 228
10 libdispatch.dylib 0x18297e1bc _dispatch_client_callout + 16
11 libdispatch.dylib 0x18298c3dc _dispatch_queue_serial_drain + 928
12 libdispatch.dylib 0x1829819a4 _dispatch_queue_invoke + 652
13 libdispatch.dylib 0x18298e34c _dispatch_root_queue_drain + 572
14 libdispatch.dylib 0x18298e0ac _dispatch_worker_thread3 + 124
15 libsystem_pthread.dylib 0x182b872a0 _pthread_wqthread + 1288
16 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
--
#0. com.apple.main-thread
0 libsystem_kernel.dylib 0x182aa5188 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182aa4ff8 mach_msg + 72
2 CoreFoundation 0x183aa25d0 __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x183aa01ec __CFRunLoopRun + 1132
4 CoreFoundation 0x1839ce2b8 CFRunLoopRunSpecific + 444
5 GraphicsServices 0x185482198 GSEventRunModal + 180
6 UIKit 0x189a157fc -[UIApplication _run] + 684
7 UIKit 0x189a10534 UIApplicationMain + 208
8 CycleSourcing (Alpha) 0x10009eba0 main (AppDelegate.swift:16)
9 libdispatch.dylib 0x1829b15b8 (Missing)
#1. com.apple.uikit.eventfetch-thread
0 libsystem_kernel.dylib 0x182aa5188 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182aa4ff8 mach_msg + 72
2 CoreFoundation 0x183aa25d0 __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x183aa01ec __CFRunLoopRun + 1132
4 CoreFoundation 0x1839ce2b8 CFRunLoopRunSpecific + 444
5 Foundation 0x18450b26c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6 Foundation 0x18452bdd0 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7 UIKit 0x18a389c38 -[UIEventFetcher threadMain] + 136
8 Foundation 0x184608e68 __NSThread__start__ + 1024
9 libsystem_pthread.dylib 0x182b89850 _pthread_body + 240
10 libsystem_pthread.dylib 0x182b89760 _pthread_body + 282
11 libsystem_pthread.dylib 0x182b86d94 thread_start + 4
#2. com.twitter.crashlytics.ios.MachExceptionServer
0 CycleSourcing (Alpha) 0x1001116b0 CLSProcessRecordAllThreads + 4296169136
1 CycleSourcing (Alpha) 0x1001116b0 CLSProcessRecordAllThreads + 4296169136
2 CycleSourcing (Alpha) 0x10011156c CLSProcessRecordAllThreads + 4296168812
3 CycleSourcing (Alpha) 0x100101688 CLSHandler + 4296103560
4 CycleSourcing (Alpha) 0x1000fc69c CLSMachExceptionServer + 4296083100
5 libsystem_pthread.dylib 0x182b89850 _pthread_body + 240
6 libsystem_pthread.dylib 0x182b89760 _pthread_body + 282
7 libsystem_pthread.dylib 0x182b86d94 thread_start + 4
#3. com.apple.NSURLConnectionLoader
0 libsystem_kernel.dylib 0x182aa5188 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182aa4ff8 mach_msg + 72
2 CoreFoundation 0x183aa25d0 __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x183aa01ec __CFRunLoopRun + 1132
4 CoreFoundation 0x1839ce2b8 CFRunLoopRunSpecific + 444
5 CFNetwork 0x1841d3a70 +[NSURLConnection(Loader) _resourceLoadLoop:] + 336
6 Foundation 0x184608e68 __NSThread__start__ + 1024
7 libsystem_pthread.dylib 0x182b89850 _pthread_body + 240
8 libsystem_pthread.dylib 0x182b89760 _pthread_body + 282
9 libsystem_pthread.dylib 0x182b86d94 thread_start + 4
#4. com.apple.CoreMotion.MotionThread
0 libsystem_malloc.dylib 0x182af8e5c tiny_malloc_from_free_list + 144
1 libsystem_malloc.dylib 0x182af751c szone_malloc_should_clear + 512
2 libsystem_malloc.dylib 0x182af751c szone_malloc_should_clear + 512
3 libsystem_malloc.dylib 0x182afa168 malloc_zone_calloc + 152
4 libsystem_malloc.dylib 0x182afa0ac calloc + 40
5 libobjc.A.dylib 0x182537624 class_createInstance + 76
6 libobjc.A.dylib 0x182545ae4 _objc_rootAlloc + 52
7 Foundation 0x184518ac4 -[NSOperation init] + 524
8 Foundation 0x184527800 -[NSBlockOperation init] + 48
9 Foundation 0x184566fb0 -[NSBlockOperation initWithBlock:] + 40
10 Foundation 0x184566f74 +[NSBlockOperation blockOperationWithBlock:] + 44
11 Foundation 0x18456cf7c -[NSOperationQueue addOperationWithBlock:] + 36
12 CoreMotion 0x18a86eec8 (null) + 63332
13 CoreMotion 0x18a88a6d4 (null) + 175984
14 CoreMotion 0x18a885ee4 (null) + 157568
15 CoreMotion 0x18a88d72c (null) + 188360
16 CoreMotion 0x18a8842f0 (null) + 150412
17 IOKit 0x183d89d28 __IOHIDEventSystemClientQueueCallback + 444
18 CoreFoundation 0x183a8ae50 __CFMachPortPerform + 180
19 CoreFoundation 0x183aa3218 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
20 CoreFoundation 0x183aa29cc __CFRunLoopDoSource1 + 436
21 CoreFoundation 0x183aa04b0 __CFRunLoopRun + 1840
22 CoreFoundation 0x1839ce2b8 CFRunLoopRunSpecific + 444
23 CoreFoundation 0x183a1bb44 CFRunLoopRun + 112
24 CoreMotion 0x18a891120 (null) + 203196
25 libsystem_pthread.dylib 0x182b89850 _pthread_body + 240
26 libsystem_pthread.dylib 0x182b89760 _pthread_body + 282
27 libsystem_pthread.dylib 0x182b86d94 thread_start + 4
#5. AVAudioSession Notify Thread
0 libsystem_kernel.dylib 0x182aa5188 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x182aa4ff8 mach_msg + 72
2 CoreFoundation 0x183aa25d0 __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x183aa01ec __CFRunLoopRun + 1132
4 CoreFoundation 0x1839ce2b8 CFRunLoopRunSpecific + 444
5 AVFAudio 0x19d4d3d24 GenericRunLoopThread::Entry(void*) + 164
6 AVFAudio 0x19d4f9d9c CAPThread::Entry(CAPThread*) + 84
7 libsystem_pthread.dylib 0x182b89850 _pthread_body + 240
8 libsystem_pthread.dylib 0x182b89760 _pthread_body + 282
9 libsystem_pthread.dylib 0x182b86d94 thread_start + 4
#6. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87160 _pthread_wqthread + 968
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#7. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87344 _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#8. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87344 _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#9. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87344 _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#10. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87344 _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#11. Thread
0 libsystem_pthread.dylib 0x182b86d88 start_wqthread + 126
#12. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87160 _pthread_wqthread + 968
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#13. Thread
0 libsystem_kernel.dylib 0x182ac3a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x182b87344 _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
#14. Crashed: NSOperationQueue 0x170a20e40 :: NSOperation 0x17084e8e0 (QOS: DEFAULT)
0 libswiftCore.dylib 0x10142c398 _swift_release_dealloc + 4
1 CycleSourcing (Alpha) 0x1000e3294 specialized Array._copyToNewBuffer(oldCount : Int) -> () + 4295979668
2 CycleSourcing (Alpha) 0x1000e2f08 BumpDetectorAlgorithm.detectStop(withAcceleration : (x : Double, y : Double, z : Double)) -> () (BumpDetectorAlgorithm.swift)
3 CycleSourcing (Alpha) 0x1000d0b18 protocol witness for MotionManagerDelegate.didReceiveAcceleration(x : Double, y : Double, z : Double) -> () in conformance DashboardViewController (DashboardViewController.swift)
4 CycleSourcing (Alpha) 0x1000eb7e8 specialized MotionManager.(startCapturing() throws -> ()).(closure #3) (MotionManager.swift:77)
5 CycleSourcing (Alpha) 0x1000eb4a8 partial apply for MotionManager.(startCapturing() throws -> ()).(closure #1) + 4296012968
6 Foundation 0x1845e3fb0 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16
7 Foundation 0x184528aa8 -[NSBlockOperation main] + 96
8 Foundation 0x1845190a4 -[__NSOperationInternal _start:] + 620
9 Foundation 0x1845e635c __NSOQSchedule_f + 228
10 libdispatch.dylib 0x18297e1bc _dispatch_client_callout + 16
11 libdispatch.dylib 0x18298c3dc _dispatch_queue_serial_drain + 928
12 libdispatch.dylib 0x1829819a4 _dispatch_queue_invoke + 652
13 libdispatch.dylib 0x18298e34c _dispatch_root_queue_drain + 572
14 libdispatch.dylib 0x18298e0ac _dispatch_worker_thread3 + 124
15 libsystem_pthread.dylib 0x182b872a0 _pthread_wqthread + 1288
16 libsystem_pthread.dylib 0x182b86d8c start_wqthread + 4
崩溃显然发生在self.delegate?didReceiveAcceleration((x:x,y:y,z:z))行中。。但不确定是什么原因造成的。可能是关闭中的self被解除分配,因此出现了错误。您可以在闭包中尝试无主self。您的崩溃报告显示专用数组。_copyToNewBuffer(oldCount:Int)->()。您不是同时从多个线程修改同一数组吗?(可能是从方法
detectStop(带加速度:)
内部)Swift数组不是线程安全的,因此多次同时访问可能偶尔会导致崩溃。@koropok我将尝试一下。@OOPerdetectStop
方法在另一个类中。我在这里调用委托方法并将数据发送回视图控制器。在该视图控制器中,我实现了didReceiveAcceleration
委托方法。从那里,我将x,y,z值发送到另一个类中,detectStop
方法所在的类。@OOPer我不确定您指的是哪个数组。顺便说一句,您能更具体一点吗?