NSString из делегата приложения не сохраняет значение при вызове в контроллере представления (iOS) - PullRequest
0 голосов
/ 20 ноября 2011

Я не могу на всю жизнь выяснить, почему я не могу установить строку NSString, расположенную в моем делегате приложения, а затем вызвать ее в другом контроллере представления.

Что я сделал, так это установил аннотации на MKMapView. Я использовал метод calloutAccessoryControlTapped, чтобы переместить View Controller в «DetailsViewController». В DetailsViewController я отображаю заголовок и подзаголовок из аннотации как UILabels на странице (это в основном заголовок и адрес). Поскольку в аннотации можно задать только два значения (заголовок и подзаголовок), и я также хочу отобразить номер телефона местоположений в DetailsViewController, я решил установить номер телефона в качестве NSString в делегате приложения. Затем я бы напомнил это значение в DetailsViewController как UILabel.

Я создал и синтезировал строку NSString в делегате приложения как «номер телефона».

Затем я импортировал .h файл делегатов приложения в файл реализации, с которым я работаю.

По какой-то причине он не будет обеспечивать значение, которое я ему установил. Я пытался выйти из множества мест, и это не работает. Когда я вызываю метод calloutAccesoryControlTapped и пытаюсь записать значение телефонного номера, оно (ноль). Когда я открываю DetailsViewController для любой аннотации, он возвращает только один конкретный номер телефона, независимо от того, какой из них я нажимаю. Итак, без лишних слов, вот код:

LocationsViewController .m:

//Miller's Neighborhood Market #9
MillersLocations *ann09 = [[MillersLocations alloc]init];
ann09.title = @"Neighborhood Market #9";
ann09.subtitle = @"1700 Todds Lane, Hampton, VA 23666";
ann09.coordinate = CLLocationCoordinate2DMake(37.0395580, -76.4096930);
[mapView addAnnotation:ann09];
[ann09 release];
delegate.phoneNumber = @"(757) 826-7608";

//Miller's Neighborhood Market #10
MillersLocations *ann10 = [[MillersLocations alloc]init];
ann10.title = @"Neighborhood Market #10";
ann10.subtitle = @"2722 Airline Blvd., Portsmouth, VA 23701";
ann10.coordinate = CLLocationCoordinate2DMake(36.8110840, -76.3644950);
[mapView addAnnotation:ann10];
[ann10 release];
delegate.phoneNumber = @"(757) 488-0223";

//Miller's Neighborhood Market #16
MillersLocations *ann16 = [[MillersLocations alloc]init];
ann16.title = @"Neighborhood Market #16";
ann16.subtitle = @"3801 Indian River Rd., Chesapeake, VA 23325";
ann16.coordinate = CLLocationCoordinate2DMake(36.822247, -76.233070);
[mapView addAnnotation:ann16];
[ann16 release];
delegate.phoneNumber = @"(757) 420-1866";

//Miller's Neighborhood Market #21
MillersLocations *ann21 = [[MillersLocations alloc]init];
ann21.title = @"Neighborhood Market #21";
ann21.subtitle = @"2129 W. Mercury Blvd., Hampton, VA 23666";
ann21.coordinate = CLLocationCoordinate2DMake(37.0385289, -76.4004810);
[mapView addAnnotation:ann21];
[ann21 release];
delegate.phoneNumber = @"(757) 826-5237";

//Miller's Neighborhood Market #23
MillersLocations *ann23 = [[MillersLocations alloc]init];
ann23.title = @"Neighborhood Market #23";
ann23.subtitle = @"13797 Warwick Blvd., Newport News, VA 23602";
ann23.coordinate = CLLocationCoordinate2DMake(37.124062, -76.531425);
[mapView addAnnotation:ann23];
[ann23 release];
delegate.phoneNumber = @"(757) 874-5806";

Я не уверен, должен ли я выпускать эти значения после каждого их задания. Хорошо, и вот как я пытаюсь вызвать их в DetailsViewController.m:

-(IBAction)callPhone:(id)sender {
    Miller_Tab_BarAppDelegate *delegate = (Miller_Tab_BarAppDelegate *)[[UIApplication sharedApplication]delegate];
    delegate.phoneNumber=phoneLabel.text;
    NSLog(@"%@", delegate.phoneNumber);
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat: @"tel:%@", phoneLabel.text]]];
}

Каждый раз, когда он выходит из системы (независимо от того, какую аннотацию я использую, чтобы выдвинуть контроллер представления), он всегда отображает номер для местоположения # 23. Я не могу понять, почему он отображает это число И почему это не изменит значение? У кого-нибудь есть идеи? Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 августа 2012

В вашем файле AppDelegate.h #define appd (AppDelegate *)[[UIApplication sharedApplication] delegate]

(Это сокращенный макрос. «AppDelegate» везде здесь следует заменить именем вашего класса appdelegate.)

Вваш viewcontroller, измените объект с помощью [appd setPhoneNumber:@"705-123 456"]; //note how the first letter p becomes P when prefixed with 'set'.

Если у вас все еще есть проблемы, вы должны создать AppDelegate *appdel=appd;, где вы устанавливаете номер телефона, установите точку останова там и убедитесь, что phoneNumber и appdel инициализированы правильно.(Наведите указатель мыши на имя переменной, напечатайте описание на консоли.)

0 голосов
/ 03 декабря 2011

посетите эту страницу, он использует несколько аннотаций и использует цикл for для размещения 5 из них

http://www.highoncoding.com/Articles/804_Introduction_to_MapKit_Framework_for_iPhone_Development.aspx

Надеюсь, это поможет

J

...