Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将委托设置为MKMapView_Ios_Objective C_Delegates_Mkmapview_Viewcontroller - Fatal编程技术网

Ios 将委托设置为MKMapView

Ios 将委托设置为MKMapView,ios,objective-c,delegates,mkmapview,viewcontroller,Ios,Objective C,Delegates,Mkmapview,Viewcontroller,我不熟悉iOS编程。我已经用MKMapView元素创建了ViewController,我想设置delegate[mapView setDelegate:self] 首先,我使用initWithNibName:bundle:like方法完成了这项工作: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibName

我不熟悉iOS编程。我已经用MKMapView元素创建了ViewController,我想设置delegate
[mapView setDelegate:self]

首先,我使用initWithNibName:bundle:like方法完成了这项工作:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {  
        [[self map] setDelegate:self]];
        UITabBarItem *item = [[UITabBarItem alloc] init];
        [item setTitle:@"Map"];
        [self setTabBarItem:item];
    }
    return self;
}
在本例中,MKMapView没有向我发送任何消息,但当我将委托消息设置为
viewDidLoad
方法时,它工作正常


有人能解释一下为什么它在
initWithNibName:bundle
中设置委托消息时不起作用吗?

视图没有加载到
initWithNibName
中,它只是初始化viewcontroller类并加载包含视图详细信息的xib文件

当viewcontroller调用
viewDidLoad
时,您将分配并初始化所有视图对象

在您的例子中,当您在
initWithNibname
setDelegate
时,调用它的值为nil,因此没有设置任何内容,但在
viewDidLoad
mapView中分配并初始化,因此工作正常

有关更深入的了解,请参阅:

这里有一个很好的解释:


视图不会加载到
initWithNibName
中,它只是初始化viewcontroller类并加载包含视图详细信息的xib文件

当viewcontroller调用
viewDidLoad
时,您将分配并初始化所有视图对象

在您的例子中,当您在
initWithNibname
setDelegate
时,调用它的值为nil,因此没有设置任何内容,但在
viewDidLoad
mapView中分配并初始化,因此工作正常

有关更深入的了解,请参阅:

这里有一个很好的解释:


这一行是你的问题:

[自我映射]

initWithNibName
中,映射尚未初始化,它返回nil


viewDidLoad
中,地图已经初始化。

这一行是您的问题:

[自我映射]

initWithNibName
中,映射尚未初始化,它返回nil


viewdiload
中,映射已经初始化。

Tnx很多。现在我知道了viewcontroller对象何时初始化=)Tnx很多。现在我知道viewcontroller对象何时初始化=)