4 Mart 2012 Pazar

Objective-C'de ViewController'lar Arası Veri Geçişi

Objective-C'de bir sayfadan başka bir sayfaya integer ve string gibi değişkenlerin verilerini aktarmak için belirli bir ilişkisel yapı ve implementasyonlar gerekmektedir. Aşağıdaki küçük örnekte TableView kullanan iki ViewController arası veri geçişi gösterilmektedir.

Öncelikle elimizde MasterViewController ve DetailViewController adında iki sınıfımız olsun. Amacımız master'dan detail'a bir integer değer aktarmak. Bunun için master'ımıza DetailViewController'a ulaşmak için MasterViewController.h'ye tanımlamamız gerekir.

#import UIKit/UIKit.h

@class DetailViewController; //Tanımlama

@interface MasterViewController : UITableViewController{
    DetailViewController *dvc;
    int *a; // aktarılacak olan değişken
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

@property (nonatomic, retain) DetailViewController *dvc;
@property (nonatomic)int a;

@end

interface'e yazdığımız dvc ismindeki DetailViewController objesini implementasyon kısmında kullanacağız.

#import "MasterViewController.h"
#import "DetailViewController.h" //Aktarım için bu sınıfın import edilmesi gerekir

@implementation MasterViewController

@synthesize dvc;
@synthesize a = _a;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(dvc != nil)
        [dvc dealloc];
    
    self.a = 5;    

    dvc = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    dvc.b = [self a]; // Aktarım işlemi burada gerçekleşiyor
    
    [self.navigationController pushViewController:bvc animated:YES];
}
       
@end

Gördüğünüz üzere, interface'de nonatomic olarak tanımlanan objemizin değerini diğer sınıftaki integer tanımlı b objesine aktardık. DetailViewController sınıfında da a objesi gibi interface'e sadece nonatomic tanımlarsanız veri geçişi başarılı bir şekilde gerçekleştirilecektir.