Soru & Cevap

iOS'da Bir ViewController'daki Datayi Baska VC'a Aktarma

05.08.2015 - 02:02

 

 

Merhabalar. Birden fazla sayida View Controller içeren bir yapim var. Bir viewcontroller'daki datami diger ViewController'daki array'e eklemek istiyorum. Data kullanicidan gelen etkilesime göre degisiyor, kullanici datayi secip ekleme butonuna bastigimda ilgili veri hedef viewController'daki array'ime eklenmeli yani.

Demek istedigimi ve yapimi özetleme amaçli söyle bir görsel ekliyorum;

Görsel kaldırıldı.

segue kullanarak yapmaya çalistim ama prepare for segue'nin içinde her seferinde;

DestinationViewController *dvc = alloc...
[dvc.array addObject: ilgiliData];

seklinde yaptigimizdan butona her tiklayip segue yapildiginda hedefViewControlleri yeniden olusuruyor bu yüzden property'si yeniden olusturuluyor önceki eklenen data da kayiplara karisiyor, sadece yeni olusturulan property'de son eklenen data elde kaliyor

Aslinda hic segue yani geçis olmasa ekleme komutu geldiginde data ilgili array'e eklense daha da güzel olur.

Yardimci olursaniz sevinirim.

9 Görüntülenme

2 Cevap

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

picture-57731-1437251011.jpg
ergunemr
05.08.2015 - 03:29

 Cevabiniz için tesekkur ederim ancak zaten prepareForSegue methodu icinde o islemleri yapip kod kalabaligi olmasin diye yazmamistim, su sekilde bir yapi var zaten veri aktarimi için;

VeriyiAlacakViewController *vc = (VeriyiAlacakViewController*)segue.destinationViewController;
            
            vc.receivedData = self.myData;

Benim sormak istedigim ise bu durumda bu kodla her seferinde ikinci viewcontroller'e ait bir instance olusturulup (yukaridaki kodda vc olan mesela) ardindan bu instance'in property'sine datayi aktardigi için her segue sirasinda ikinci viewController'a ait yeni instance olusturmuyor mu ? Bu durumda önceki önceki instance'ye aktarilan veri kaybolmus oluyor.

Ikinci viewController'da gelen verileri tutmak icin array property'si olusturmam durumunda gelen veriyi bu array'e ekliyorum buraya kadar sorun  yok, ama tekrar segue yapildiginda 2.veri geldiginde bu 2.veri segue'de olusturulan yeni instance'a ait array'e eklendigi için ilk veri önceki array'le beraber gene kayiplara karisiyor.

static tanimlamayi kullanmam (ki objective C' de bunun icin ayri bir söz dizimi var mi bilmiyorum ama) yeni bir instance olusturmama ragmen önceki property'i nasil elde tutacak tam anlamadim.

Umarim sorumu tam olarak anlataabilmisimdir:)

 

 

Anıl SÖZERİ
05.08.2015 - 05:36
segue konusunda yukarıda "alloc.." yazdığınız için öyle anladım kusura bakmayın, static tanımlamadığınız takdir yeni oluşan bir veride değeri tutamazsınız, tutmak istediğiniz bir veriyi static tanımlamak istememenize de anlam veremedim açıkçası bunun yanı sıra istemezseniz de tutmak için iki farklı yöntem söyledim ama bakmadınız sanırım, NSUserDefaults ve Core Data'yı incelemenizi öneririm. NSUserDefaults basit verileri tutabileceğiniz ufak bir veri tabanı gibi düşünebilirsiniz, Core Data ise Object döndüren iOS' a özel bir veritabanı, iyi çalışmalar.
Emre Ergün
05.08.2015 - 11:42
Estafurullah diger önerinizi de gördüm tabi tesekkur ederim nsuserdefaults'u biliyorum hatta uygulamadaki diger bir islem icin kullandim ama bu tür bir controller'ler arasi veri aktarimi icin kalici hafizayi kullanmak çok uygun gelmedi bana, delegate'leri kullanarak bu tür bir islem yapabilecegimi ögrendim onu arastiyorum simdi, tesekkurler tekrardan.
Anıl SÖZERİ
06.08.2015 - 09:43
Siz delegate metotları ile de yapsanız aynı veriyi taşıyacaksınız zaten hafıza da yer tutmuş olacak her türlü, hiyerarşiyi düzgün kurduğunuz takdir de kalıcı olarak hafıza da tutmanız dezavantaj sağlamayacaktır diye düşünüyorum, kaldı ki siz kalmasından yanasınız, tabi ki alternatif çözümleri de vardır, Core Data'yı da incelemenizi öneririm. Aklınız da belirlediğiniz bir yapı vardır illa ki onun üzerinden gidin, iyi çalışmalar.
picture-3650-1421928561.jpg
anilsozeri
05.08.2015 - 09:27

Merhaba,

Öncelikle kullandığınız prepareForSegue doğru bir kullanım fakat içeride alloc init ile değil segue.destinationViewController'ı kullanarak diziye eleman eklemelisiniz.

İkinci olarak da verileriniz kaybolmasın istiyorsanız static bir tanımlama kullanarak verileri tutabilirsiniz, bu sayede uygulamanın yaşam döngüsü sonlanana kadar kalacaktır.

Uygulama kapandıktan sonra kalsın dahi istiyorsanız, basit bir veri tutacaksanız NSUserDefaults kullanmanızı, daha kompleks veriler ile çalışacaksanız SQLite alt yapısı ile çalışan object döndüre CoreData veritabanı yapısını öğrenip, bilgilerinizi buraya yüklemenizi tavsiye ederim.

İyi çalışmalar.