Soru & Cevap

prepareforsegue dictionary nesnesini taşıma

01.09.2014 - 04:20

Merhabalar, JSON Data Set' ten gelen datayı NSDictionary' da tutuyorum. UITableView' da göstermek istediğim key' leri gösteriyorum. StoryBoard üzerinden oluşturduğum segue ile DetailView' da yine Data Set içinde yer alan picture link' ini NSString' ten URL' e URL' den Data' ya Data' dan da UIImageView içine atıyorum.

 

Bu son bahsettiğim kısımı gerçekleştiremiyorum. Yani Dictionary içinden gelen Picture Link stringini detailView' a taşıyamadım.

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

DetailView *mvc = [segue destinationViewController];

NSDictionary *postDict = [self.arrPosts objectAtIndex.indexPath.row];

mvc.detailImageLinkString = [[[postDict valueForKeyPath:@"user"]valueForKeyPath:@"image"]valueForKeyPath:@"image"];

}

 

Segue yi storyboard ile bağladığımdan dolayı didSelect metodu işe yaramıyor sanırım. PrepareForSegue' de bir sıkıntı var. Yardımlarınız için teşekkürler...

10 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-3650-1421928561.jpg
anilsozeri
02.09.2014 - 11:34

Sizin projeniz bende çalışmadı ama istediğiniz yapıya benzer bir örnek kurdum kendi yapınıza entegre edebilirsiniz.

http://s3.dosya.tc/server27/DJh21m/SegueDataPass.zip.html

İyi çalışmalar.
 

Profile picture for user ekucet
ekucet
02.09.2014 - 10:22

Anıl Hocam ekte proje dosyasını gönderiyorum. Şöyle bir durum var, storyBoard üzeri,nden segue verildiği zaman sanırım tek yol prepareForsegu metodunu kullanmak. Bazı kaynaklardan okuduğuma göre bu şekilde olması gerekiyor ama ben prepareforsegue de dictionary nesnesini alamıyorum. Müsait bir zamanınızda inceleyebilirseniz sevinirim. Küçük bir proje dosyası halinde zaten. Tekrardan teşiekkür ederim.

 

Proje Dosyası Linki

picture-3650-1421928561.jpg
anilsozeri
01.09.2014 - 04:56

Merhaba,

Storyboard üzerinde doğru şekilde linklediniz mi? TableView'in cell'i seçiliyken kontrol tuşuna basılı tutup bir sonraki view'i işaretlerseniz didSelect metodu tetiklenmiş olur, siz de içerisinde istediginizi yapabilirsiniz. TableView'in delegate ve datasource bağlantılarını kontrol edin.

Alternatif bir çözüm;

ViewController.h

[code]

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

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>{
    NSArray *myArray;
    SecondViewController *secondViewController;
}

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

[/code]

ViewController.m

[code]

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    myArray = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier = @"MyCell";
    UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    
    cell.textLabel.text = myArray[indexPath.row];
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    secondViewController.labelText = myArray[indexPath.row];
    [self presentViewController:secondViewController animated:YES completion:nil];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [myArray count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

@end

[/code]

SecondViewController.h

[code]

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *myLabel;
@property (strong, nonatomic) NSString *labelText;

@end

[/code]

SecondViewController.m

[code]

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    _myLabel.text = _labelText;
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

[/code]

*Storyboard üzerinden ID vermeyi unutmayın.

İyi çalışmalar.