Umarım ilk yazımızdaki örneğimizi çalıştırıp o ilk uygulama yapma heyecanını yaşamışsınızdır. Bu yazımızda artık uygulamamızında kullanacağımız sınıfların yapısını, nasıl yaratılacağını inceleyelim. Ilk yazımızda .m ve .h dosyalarından bahsetmiştik. Objective-c de sınıfların ikiye ayrıldığını ve bunların .m ve .h dosyaları bahsetmiştik. Şimdi onları biraz açalım. – .h dosyası interface dosyamızdır. Icerisinde global değiskenler tanımlayabilceğimiz Tasarım ekranında oluşturduğumuz bileşenleri koda bağlayacak işlemler yapabiliceğimiz kısım bu kısımdır. Ilerleyen bölümlerde göreceğız, Farklı bir kütüphane kullandığımızda yada sınıfa farklı bir sınıf kullanımı yaptığımızda o sınıfa ait delegasyonların tanımlamalarıda bu dosya içinde tanımlanacak. – .m dosyası implemetasyon dosyamızdır. Bu dasya, içinde bütün kod işlemleri yapacağımız kısımdır. Örneğin geçen bölümde ekrana Merhaba Dunya yazdıran işlemler bu dosya içindeydi. .h dosyası içeriğine gelirsek. Javadakinin aksine sınıflar { ile başlayıp ,} ile bitmez. Bunun yerine @interface MainViewController : UIViewController ile başlar. @end ile biter. Burada UIViewController yaratılan sınıfın atasıdır. Aynı Javadaki ‘extends Object’ gibi. Gelelim Objective-c nin bir çok programlama dilinden ayrından kısmına. FONKSİYONLAR. Yukarıda birden fazla parametre almış fonsiyon gorüyoruz. 1- Geri döndürlecek değerin türünü belirtiyoruz. 2- Geri döndürme işlemi. Eğer 1. kısım void ise bu kısıma gerek yoktur. 3- Fonksiyonun isimidir. 4- Dikkat edilmesi gereken kısım burasıdır. İki nokta üstüste ile girilecek ilk parametre kısmını ayırıyoruz. Fonksiyonu kullanınca daha iyi anlayacaksınız. Parametre belirlemeden önce mutlaka bunu kullanmanız gerekmekte. 5- Ilk parametrenin türü. 6- Parametrenin ismi. 7- İkinci parametre ayıraç kelimesi yada cümleciği. 8- İkinci parametre türü. 9- İkinci parametre ismi. Yukarıdakı resimde belirtmemişim fakat birde fonksiyon başlangıcı – ile yapılıyor. Bu şekilde bu fonksiyonu javadaki gibi public yapmıs oluyoruz. Bir değer başlangıç ise + dır. + fonksiyonu private yapar yani o fonksiyona başka sınıflardan ulaşamazsınız. Başka sınıflardan ulaşmak istediğimiz fonksiyonu { } ve arasındaki kodlar olmadan h dosyasına eklememiz gerekiyor. Örneğin fonksiyonumuz aşağıdaki gibi olmalı. Javada olduğu gibi alınan parametrelerin , ile ayrılmadığını fark etmişsinizdir. Virgül yerinde kendi seçtiğimiz kelimeler kullanıyoruz. Aslında alışında daha zevkli olduğunu fark edeceksiniz. Evet biraz daha uzun ama fonksiyonu kullanmaya gelince çok fazla parametreli bir fonksiyon yaratmışsanız eğer parametreleri hangi sırada yazdığınızı size Xcode bu sayede hatırlatacaktır. Kullanımıdı bu örnek için [obj collectionView:ViewIsmi numberOfItemInSection:3] gibidir. İlk dikkat çeken iki şeyden ilki [ ] kullanımı. Evet ilk başlarda biraz zorlanacaksınız. Fakat fonksiyon kullanımda bu gerekli. Aynı işlemi parametre almayan fonksiyonlarda dot notation ile yapılabilir fakat pek önermiyorum. İkincisi pointer kavramı. Evet maalesef Objective-c pointer kavramı kullanıyor bu yüzden primative tipler haricinde yaratılan nesneden önce * kullanmak zorundasınız. Fonksiyonlar tamam fakat bir nesne nasıl yaratılır? Javada orneğin SınıfIsmi nesne = new SınıfIsmi(); şeklinde olan yapı burada biraz farklı. Objective-c de SınıfIsmı *nesne =[ [SınıfIsmi alloc] init ] şeklindedir. Peki nasıl işler? Nesne yaratılırken alloc fonksiyonu nesneye bellekte yer açar. Init ilede ayağa kaldırılır. Init kısmının bir çok farklı yapısı vardır. Koleksiyonlar kısmına gelince bunlardan bahsedeceğiz. Gelelim basit bir sınıf nasıl yaratılır ve kod içinde nasıl çağırılıra. Aşağıdaki ekrandan New File seçiyoruz. Objective-C classı seçiyoruz. Next ile devam ediyoruz. Karşımıza çıkan ekranda 4 tane doldurmamız gereken alan bulunmakta. Birincisi sınıfın ismi. ikinci kısımda Subclass of bulunmakta. Buda sınıfın atasını belirtmeliyiz. Tam bu noktada önemli bilgiler vermek istiyorum. UIViewController gibi sınıflar yani UI ile başlayan applein standart sınıfları kısaltmadanda anlaşılabileceği gibi UserInterface sınıflarıdır. Bunlarla görsel bileşenleri kontrol ediyoruz. Eğer bir View oluşturmuşsanız ve bunu kod ile kontrol etmek isterseniz bir UIViewController oluşturup birbirine bağlamanız gerekmekte. İsimlendirmede önerilen kullanım, miras alınan sınıfın ismi oluşturulan sınıfın isimlendirilmesinde kullanmak. Burada ben ikinciViewController olarak isimlendirdim. Subclass UIViewController olarak seçtim. Targeted for ipad ise sınıfın ipad için kontrol sağlayıp sağlamayacağını belirtilen kısım. With XIB for user interface birinci yazımızda azda olsa bahsettiğimiz xib dosyasıdır. Eğer bunu seçersek bize birde aynı isimde xib gorsel dosyası oluşturacak. Şuan için bu kısımı seçmiyorum. Sebebi StoryBoard kullanmam. Storyboard içinde zaten View oluşturup kolaylıkla kullanıyorum. Ama StoryBoardda her zaman istediğimi yapamayabilirim. İlerleyen yazılarda bu durumda xib dosyalarının nasıl kullanılacağınıda gösterceğim. Next ile devam ediyoruz. Bize sınıfı nereye kaydedeceğimizi soracak. Kayıt işleminden sonra sınıfınızı oluşturduk. Sırada StoryBoardu açıp yeni bir UIViewController sürükleyip bırakıyoruz. Ve aşağıdaki ekrandaki gibi kontrol sınıfını seçiyoruz. Buradan sonra değinilmesi gereken bir kısımda NavigationController. Iphone kullanan arkadaşlar bilir yeni bir ekran aştığımızda ekranın sol üst kısmında bir önceki ekrana dönmeyi sağlayan bir tuş bulunur. İşte bunu yapmamızı kolaylaştıran bileşenleri barındıran kontrol yapısı NavigationControllerdır. Bunu projeye eklemek oldukça basit. Programın ilk Viewini seçiyoruz. Ve Editor -> Embed in -> Navigation Controller seçiyoruz. Sonrasında daha önceden bulunan butona ikinci ekranı açmasını sağlayan aksiyonunu veriyoruz. Buton üzerinden farenin sağ tuşunu basılı tutup giğer ekrana doğru sürüklüyoruz. Bıraktığımızda 3 seçenek karşımıza çıkacak. Bunlardan Push’u seçelim. Aslında burada programı çalıştırırsak düzgün bir şekilde çalıştığını göreceksiniz. Fakat ikinci ekrana herhangi bir bilgi aktarmak isteyebiliriz. Mesela ikinci ekrandaki bir texti birinci ekranki herhangi bir bilgiyle doldurmak isteyebiliriz. Bunun için buton basma eylemine aşağıdaki ekrandaki seçip bir isim veriyoruz. Böylece program hangi eylemi gerçekleştirebileceğini anlayacaktır. Bu fonsiyon stadart bir fonsiyondur. Örneğin Viewde birden fazla buton olduğunda bu fonksiyon sayesinde hangisine tıklandığını öğrenebilirsiniz. segue.identifier isEqualToString:@”ide” ile tıklanan butonun eyleminin o olup olamadığı kontrol edliyor. ikinciViewController *ikinciEkran = segue.destinationViewController; ile nesne yaratılıyor. Son kısımda iste bir title ekleniyor. Burada dikkat etmeniz gereken kısım bir nesne nasıl yaratılırın farklı bir durumudur. Bir önceki yazıda belirttiğim gibi bu işlemleri daha farklı şekillerde olduğu gibi yapabiliriz. Ama benimde nasıl yapılırı bulmak için çok uğraştığım tarzları anlatmaya çalışıyorum. Programın sorunsuz çalışması gerikiyor. Herhangi bir sorun oluşursa yorumlar kısmından sorabilirsiniz. Bir sonraki yazımızda standart fonksiyonları inceleyip, Objective-c koleksiyon(NSString,NSArray…) yapısına giriş yapacağız.