首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复覆盖func viewDidAppear

修复覆盖func viewDidAppear
EN

Stack Overflow用户
提问于 2018-01-27 04:00:16
回答 2查看 3K关注 0票数 1

我遵循了这个指南:

https://codewithchris.com/iphone-app-connect-to-mysql-database/#app

我的重写函数出了问题:

方法‘viewDidAppear(动画:)’的参数名称与重写的方法'viewDidAppear‘的参数名称不匹配。

下面是代码:

代码语言:javascript
复制
import Foundation
import UIKit
import MapKit

class DetailViewController : UIViewController {
    @IBOutlet weak var mapView: MKMapView!

    var selectedLocation : LocationModel?

    override func viewDidAppear(animated: Bool) {
        // Create coordinates from location lat/long
        var poiCoodinates: CLLocationCoordinate2D = CLLocationCoordinate2D()

        poiCoodinates.latitude = CDouble(self.selectedLocation!.latitude!)!
        poiCoodinates.longitude = CDouble(self.selectedLocation!.longitude!)!
        // Zoom to region
        let viewRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(poiCoodinates, 750, 750)
        self.mapView.setRegion(viewRegion, animated: true)
        // Plot pin
        let pin: MKPointAnnotation = MKPointAnnotation()
        pin.coordinate = poiCoodinates
        self.mapView.addAnnotation(pin)

        //add title to the pin
        pin.title = selectedLocation!.name
    }
}

编辑:我已经尝试在函数中添加下划线:

代码语言:javascript
复制
override func viewDidAppear(_ animated: Bool) 

最后是一个错误:

线程1: EXC_BAD_INSTRUCTION(code=l386_INVOP,subcode=0x0)

调试控制台显示如下:

代码语言:javascript
复制
2018-01-26 23:22:28.557604 newapp[20449:3980593] [] nw_host_stats_add_src recv too small, received 24, expected 28
2018-01-26 23:22:28.564085 newapp[20449:3980593] [] ____nwlog_simulate_crash_inner_block_invoke dlopen CrashReporterSupport failed
2018-01-26 23:22:28.564632 newapp[20449:3980593] [] __nwlog_err_simulate_crash simulate crash failed "nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available"
2018-01-26 23:22:28.566176 newapp[20449:3980593] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace:
        [x86_64] libnetcore-856.30.16
    0   libsystem_network.dylib             0x0000000111f99666 __nw_create_backtrace_string + 123
    1   libnetwork.dylib                    0x0000000112b65006 nw_socket_add_input_handler + 3164
    2   libnetwork.dylib                    0x0000000112b42555 nw_endpoint_flow_attach_protocols + 3768
    3   libnetwork.dylib                    0x0000000112b41572 nw_endpoint_flow_setup_socket + 563
    4   libnetwork.dylib                    0x0000000112b40298 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612
    5   libnetwork.dylib                    0x0000000112b5bae1 nw_endpoint_handler_path_change + 1261
    6   libnetwork.dylib                    0x0000000112b5b510 nw_endpoint_handler_start + 570
    7   libnetwork.dylib                    0x0000000112b731f9 nw_endpoint_resolver_start_next_child + 2240
    8   libdispatch.dylib                   0x0000000111d16978 _dispatch_call_block_and_release + 12
    9   libdispatch.dylib                   0x0000000111d400cd _dispatch_client_callout + 8
    10  libdispatch.dylib                   0x0000000111d1de17 _dispatch_queue_serial_drain + 236
    11  libdispatch.dylib                   0x0000000111d1eb4b _dispatch_queue_invoke + 1073
    12  libdispatch.dylib                   0x0000000111d21385 _dispatch_root_queue_drain + 720
    13  libdispatch.dylib                   0x0000000111d21059 _dispatch_worker_thread3 + 123
    14  libsystem_pthread.dylib             0x00000001120e94de _pthread_wqthread + 1129
    15  libsystem_pthread.dylib             0x00000001120e7341 start_wqthread + 13
Data downloaded
fatal error: unexpectedly found nil while unwrapping an Optional value
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-27 05:23:59

您需要像这样声明它:

代码语言:javascript
复制
override func viewDidAppear(_ animated: Bool) { ... }

这是因为未命名的函数参数:

在Swift > 2.2中,所有函数参数都被命名。在Objective中,第一个函数参数没有命名。为此,可以用下划线替换函数的参数名。当您调用这个函数时,您不必使用参数名称(因此是“未命名的参数”)。

并且尽量不要像您所做的那样使用!,让我们假设您的模型如下所示:

代码语言:javascript
复制
struct LocationModel {
    let name: String
    let latitude: Double?
    let longitude: Double?

    init(longitude: Double? = nil, latitude: Double? = nil, name: String) {
        self.latitude = latitude
        self.longitude = longitude
        self.name = name
    }
}

使用if-let代替获取值,而不是强制展开它:

代码语言:javascript
复制
override func viewDidAppear(_ animated: Bool) {
    // Create coordinates from location lat/long
    var poiCoodinates: CLLocationCoordinate2D = CLLocationCoordinate2D()

    if let latitude = self.selectedLocation!.latitude, let longitude = self.selectedLocation!.longitude {
        poiCoodinates.latitude = CDouble(latitude)
        poiCoodinates.longitude = CDouble(longitude)
    } else {
        // do what you want if above fails
    }

    // Zoom to region
    let viewRegion: MKCoordinateRegion = MKCoordinateRegionMakeWithDistance(poiCoodinates, 750, 750)
    self.mapView.setRegion(viewRegion, animated: true)
    // Plot pin
    let pin: MKPointAnnotation = MKPointAnnotation()
    pin.coordinate = poiCoodinates
    self.mapView.addAnnotation(pin)

    //add title to the pin
    pin.title = selectedLocation!.name
}
票数 2
EN

Stack Overflow用户

发布于 2018-01-27 05:09:24

请更改您的代码:

代码语言:javascript
复制
override func viewDidAppear(animated: Bool) {

}

对此:

代码语言:javascript
复制
override func viewDidAppear(_ animated: Bool) {

}

它将解决这个问题:

方法‘viewDidAppear(动画:)’的参数名称与重写的方法'viewDidAppear‘的参数名称不匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48472461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档