2013-07-11 1 views
0

Я новичок в программировании на iOS. Я создал ViewController с MKMapView элементом, и я хотел установить делегат [mapView setDelegate:self]Настройка делегата на MKMapView

Сначала я сделал это в методе initWithNibName: сверток: как:

- (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, он работал нормально.

Может кто-нибудь объяснить мне, почему он не работал, когда setting delegate message был в initWithNibName:bundle?

ответ

4

Представления не загружаются в initWithNibName, он просто инициализирует класс viewcontroller и загружает xib-файл, содержащий ваши данные о просмотре.

При вызове viewcontroller viewDidLoad у вас будут выделены и инициализированы все объекты вашего вида.

В вашем случае, когда вы setDelegate в initWithNibname, вы вызываете его на нулевой стоимости, так что ничего не получить набор, но в viewDidLoad MAPview выделяется и инициализируется, поэтому он прекрасно работает.

Для более глубокого понимания относятся:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

Красивое объяснение: What is the process of a UIViewController birth (which method follows which)?

Looking to understand the iOS UIViewController lifecycle

http://thejoeconwayblog.wordpress.com/2012/10/04/view-controller-lifecycle-in-ios-6/

View Life-cycle

+0

Tnx много. Итак, теперь я знаю, когда объекты viewcontroller становятся инициализированными =) –

1

Эта линия ваша проблема:

[собственной карте]

В initWithNibName карта еще не инициализирована и возвращает ноль.

В viewDidLoad карта уже инициализирована.