Передача VALUE между двумя контроллерами представления в контроллере SplitView

У меня такой сценарий: я новичок в Xcode и также сделал образцы. На самом деле я использовал контроллер SplitView, в котором все работает нормально, но когда дело доходит до контроллера подробного представления, я имею в виду контроллер навигации с двумя контроллерами представления.

В этом я просто использовал «Выборщик», чтобы получить местоположение, и когда я просто нажимаю «Получить местоположение», он переходит ко второму контроллеру представления, но здесь я не получаю долину. Вот кусок кода

//ViewController1.h

#import "QuerySubmission.h"

@interface MDDetailViewController : UIViewController <UISplitViewControllerDelegate>
{
    IBOutlet UIPickerView *pickerView;
    NSArray *pickerViewArray;
    NSString *setLocation;


}

@property (nonatomic, retain) NSArray *pickerViewArray;
@property (weak, nonatomic) IBOutlet UIPickerView *pickerView;
@property(nonatomic,retain) NSString *setLocation;

@property (strong, nonatomic) id detailItem;

@property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;

- (IBAction)getLocation:(id)sender;

@end

//ViewController1.m

 - (IBAction)getLocation:(id)sender {
    int selectedIndex = [self.pickerView selectedRowInComponent:0];
    NSString *message = [NSString stringWithFormat:@"Selected Location: %@",[pickerViewArray objectAtIndex:selectedIndex]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];

    QuerySubmission *obj = [[QuerySubmission alloc] initWithNibName:@"QuerySubmission" bundle:nil];
    obj.location=[pickerViewArray objectAtIndex:selectedIndex];

    //NSLog(@"loc %@", [ pickerViewArray objectAtIndex:selectedIndex]);
    //[ pickerViewArray objectAtIndex:selectedIndex];
}

Здесь я получаю список местоположений и извлекаю

//ViewController2.h

#import <UIKit/UIKit.h>
#import "MDDetailViewController.h"

@interface QuerySubmission : UIViewController <UISplitViewControllerDelegate>
{
    NSString *location;
}

@property(nonatomic,retain) NSString *location;
- (IBAction)querySubmit:(id)sender;

@end

Но как бы перейти на другой контроллер. Он просто печатает "null". Я новичок в контроллере SplitView. Итак, я делаю что-то не так или мне нужно что-то заявить в «делегатах»? Пожалуйста, сделайте необходимое


person Community    schedule 01.04.2013    source источник


Ответы (2)


Если вы выполняете переход от одного контроллера к другому, передача значений может быть такой же простой, как добавление этого фрагмента кода в вашу реализацию ViewController1:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    QuerySubmission * viewController2 = segue.destinationViewController;
    if(viewController2)
    {
        viewController2.location=[pickerViewArray objectAtIndex:selectedIndex];
    }
}

И сам я стараюсь свести к минимуму вставку переменных в делегат приложения, который действительно должен в основном использоваться для вещей типа UIApplicationDelegate, таких как приостановка приложения и т. д.

person Michael Dautermann    schedule 01.04.2013
comment
Большое спасибо .. заслужил. - person ; 01.04.2013

Для таких задач лучше использовать AppDelegate!

Объявите свойство @property(nonatomic,retain) NSString *location; в файле AppDelegate.h.

Перепишите метод getLocation: следующим образом:

- (IBAction)getLocation:(id)sender
{
    int selectedIndex = [self.pickerView selectedRowInComponent:0];
    NSString *message = [NSString stringWithFormat:@"Selected Location: %@",[pickerViewArray objectAtIndex:selectedIndex]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
     [[[UIApplication sharedApplication] delegate] setLocation:(NSString *)[pickerViewArray objectAtIndex:selectedIndex]];
}

В QuerySubmission вы можете получить доступ к местоположению, используя:

[[[UIApplication sharedApplication] delegate] location];
person Midhun MP    schedule 01.04.2013
comment
@KumarKl: С удовольствием :) - person Midhun MP; 01.04.2013