Viewcontroller.h
import UIKit
import MapKit
class ViewController: UIViewController {
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension ViewController : CLLocationManagerDelegate {
private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
locationManager.requestLocation()
}
}
private func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if locations.first != nil {
print("location:: (location)")
}
}
private func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("error:: (error)")
}
}
错误:
2016-10-31 16:12:11.436192 Assemble[57741:2743477] bundleid: com.AssembleTm.Assemble, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-10-31 16:12:11.437006 Assemble[57741:2743477] subsystem: com.apple.siri, category: Intents, enable_level: 1, persist_level: 1, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
2016-10-31 16:12:11.524494 Assemble[57741:2743668] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-31 16:12:11.526709 Assemble[57741:2743668] subsystem: com.apple.UIKit, category: HIDEventIncoming, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-31 16:12:11.561488 Assemble[57741:2743658] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 1, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
2016-10-31 16:12:11.638717 Assemble[57741:2743477] subsystem: com.apple.UIKit, category: StatusBar, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-31 16:12:11.744 Assemble[57741:2743477] *** Assertion failure in -[CLLocationManager requestLocation], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreLocationFramework_Sim/CoreLocation-2100.0.12/Framework/CoreLocation/CLLocationManager.m:865
2016-10-31 16:12:11.855 Assemble[57741:2743477] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Delegate must respond to locationManager:didUpdateLocations:'
*** First throw call stack:
(
0 CoreFoundation 0x000000010a58d34b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010873b21e objc_exception_throw + 48
2 CoreFoundation 0x000000010a591442 +[NSException raise:format:arguments:] + 98
3 Foundation 0x0000000106799edd -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
4 CoreLocation 0x0000000106291523 CLClientGetCapabilities + 13233
5 Assemble 0x00000001061e1976 _TFC8Assemble14ViewController11viewDidLoadfT_T_ + 294
6 Assemble 0x00000001061e19e2 _TToFC8Assemble14ViewController11viewDidLoadfT_T_ + 34
7 UIKit 0x000000010708f06d -[UIViewController loadViewIfRequired] + 1258
8 UIKit 0x000000010708f4a0 -[UIViewController view] + 27
9 UIKit 0x0000000106f59045 -[UIWindow addRootViewControllerViewIfPossible] + 71
10 UIKit 0x0000000106f59796 -[UIWindow _setHidden:forced:] + 293
11 UIKit 0x0000000106f6d0a9 -[UIWindow makeKeyAndVisible] + 42
12 UIKit 0x0000000106ee6259 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4818
13 UIKit 0x0000000106eec3b9 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1731
14 UIKit 0x0000000106ee9539 -[UIApplication workspaceDidEndTransaction:] + 188
15 FrontBoardServices 0x000000010e1cf76b __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
16 FrontBoardServices 0x000000010e1cf5e4 -[FBSSerialQueue _performNext] + 189
17 FrontBoardServices 0x000000010e1cf96d -[FBSSerialQueue _performNextFromRunLoopSource] + 45
18 CoreFoundation 0x000000010a532311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
19 CoreFoundation 0x000000010a51759c __CFRunLoopDoSources0 + 556
20 CoreFoundation 0x000000010a516a86 __CFRunLoopRun + 918
21 CoreFoundation 0x000000010a516494 CFRunLoopRunSpecific + 420
22 UIKit 0x0000000106ee7db6 -[UIApplication _run] + 434
23 UIKit 0x0000000106eedf34 UIApplicationMain + 159
24 Assemble 0x00000001061e3fcf main + 111
25 libdyld.dylib 0x000000010af5b68d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
我是swift 3.0的新手,但是我找不到任何关于如何解决这个问题的事情(我在stackoverflow上查了一下但是他们给出的答案并没有帮助我......)
答案 0 :(得分:8)
您正在使用xcode8和swift3,但您的委托方法是从swift复制的.2。更改您的委托方法,如下所示。
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js" type="text/javascript"></script>
<style>
</style>
</head>
<body>
<div id="parent" style="width:150px;height:150px;overflow:hidden;cursor:pointer;background-color:red;margin:0;padding:0;position:relative;">
<div id="child" style="width:100%;height:100%;transform:rotate(180deg)">
<img id="draggable" alt="Hello" src="mario.jpg" alt="mario" style="min-height:100%;max-height:100%;min-width:100%;">
</div>
</div>
<script>
$(document).ready(function(){
var y1 = $("#parent").height();
var x1 = $('#parent').width();
var y2 = $('#draggable').height();
var x2 = $('#draggable').width();
$( "#draggable" ).draggable({
drag: function(event, ui) {
if(ui.position.top >= 0) {
ui.position.top = 0;
}
else if(ui.position.top <= y1 - y2) {
ui.position.top = y1 - y2;
}
if(ui.position.left >= 0) {
ui.position.left = 0;
}
else if(ui.position.left <= x1 - x2) {
ui.position.left = x1 - x2;
}
},
stop: function(event, ui) {
}
});
})
</script>
</body>
</html>
答案 1 :(得分:1)
另一个可能的错误原因是您只有用于的方法
locationManager(_:didUpdateLocations:)
并且您缺少
的方法 locationManager(_:didFailWithError:)
根据requestLocation()
的文档:
使用此方法时,关联的委托必须实现locationManager(:didUpdateLocations :)和locationManager(:didFailWithError :)方法。失败是程序员错误。
答案 2 :(得分:1)
import UIKit
import CoreLocation
class ViewController: UIViewController {
var locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
}
}
extension ViewController : CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if let location = locations.first {
print("Location data received.")
print(location)
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Failed to get users location.")
}
}
在调用requestLocation()函数之前需要分配委托,因为在requestLocation()完成之后,它将触发didUpdateLocations,但是要调用didUpdateLocations,它应该知道正在调用哪个对象didUpdateLocations。向编译器说明
locationManager.delegate =自我
习惯于
调用locationManager.requestLocation()。
在CLLocationManagerDelegate协议的扩展中,实现didUpdateLocations和didFailWithError。
答案 3 :(得分:0)
如果您向位置管理器请求位置并且其委托为nil,则可能会出现此错误。 确保在调用任何位置请求之前始终设置委托。
答案 4 :(得分:0)
这对我有用
import UIKit
import CoreLocation
class WeatherViewController: UIViewController {
@IBOutlet weak var conditionImageView: UIImageView!
@IBOutlet weak var temperatureLabel: UILabel!
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var searchInputField: UITextField!
var weatherManager = WeatherManager()
var locationManager=CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
self.searchInputField.delegate=self
weatherManager.delegate=self
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
// Do any additional setup after loading the view.
}
}
extension WeatherViewController : CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("error:: \(error.localizedDescription)")
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
locationManager.requestLocation()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if locations.first != nil {
print("location:: \(locations[0])")
}
}
}