"Enter"a basıp içeriğe geçin

Kategori: Kendime Not

iPhone Kursu: Plist’lerle tablo oluşturmak-Bölüm1

İki haftadır iPhone kursumuzla ilgili yazı yazamadık. Bunun en büyük nedeni kurs dışındaki işlerimizin aşırı yoğun olmasıydı. Kursdaki konular da giderek daha karmaşık hale geldiği için malesef yazacak vakit bulamadım. Bir ara screen-recording ile video şeklinde hazırlayayım dedim ama sessiz bir ortamda boşluğa konuşmayı beceremedim. Bir kaç popüler video blog inceledim, ama bana göre değilmiş. Hasılı, klasik usüle devam.

Bugün sanırım 10. dersi gördük. Sayısı mühim değil, mevzusu mühim. Artık dışardan data alabileceğimiz konulara geldik. Hocamız önce plist denen dosyalardan nasıl veri okuyabileceğimizi anlattılar. Kısa fakat çok yararlı bir konu olduğundan blogda paylaşmak istedim.

Plist dosyaları, anahtar=>değer (key=>val) formatında veri içeren basit xml dosyalarıdır. Aslında bütün iPhone/iPad uygulamalarında zaten bir tane plist dosyası (uygulama_adi.plist) bulunmaktadır ve uygulamanın icon dosyaları, uygulamanın görünecek adı, ana nib dosyasının ne olduğu gibi bazı ayarlar bu dosyada tutulur.

Biz de istediğimiz kadar plist dosyası oluşturup projemizin resource kısmına koyabilir ve uygulamamızda bu dosyalardan faydalanabiliriz.

Basit bir örnekle konunun detaylarına girelim: Amacımız yine yemek tarifleri uygulaması  yazmak olsun. Ama bu kez datamızı kodun içerisine değil bu plist dosyalara yazalım. İnşallah ileriki konularda da veritabanına yazarız. Uygulamamız “navigation based” bir uygulama olsun ve ilk açıldığında listede yemek kategorileri olsun, tıklandığında ikinci listede de o kategorilerdeki yemekler görünsün. Sonraki aşamaların mantığını zaten daha önceki yazılarda uzun anlatmıştık. O kısımlara hiç girmeyelim. Sadece birbiri ardınca iki listeyi plistlerle doldurmayı görelim.

Mysql için count_str() “kelimedeki karakterin adedi” fonksiyonu

Bir önceki yazıda MySQL için split_str() fonksiyonunu oluşturmuştuk. Kelimeleri verdiğimiz karaktere göre bölüyordu. Amacımız; ad ve soyad değerleri tek bir sütunda isim olarak verildiğinde bu isim bilgisinden ad ve soyadı ayrıştırabilmek idi. split_str() fonksiyonu datayı istediğimiz karaktere göre (örneğin boşluk karakteri) bölebiliyor ve ortaya çıkan gruplardan hangisini görmek istiyorsak onu almamızı sağlıyor. Ama problemimiz için bu yeterli değil. Çünkü isimler her zaman “Fehim Tabak” gibi bir ad ve bir soyaddan oluşmuyor. İki ad ve bir soyad, hatta kulakları çınlasın sevgili arkadaşım “Yusuf Ziya Bektaş Köseoğlu” gibi üç ad ve bir soyad da olabiliyor. Böyle bir bilgiden soyadı ve adı ayrıştırabilmek için “en son kelime soyaddır” ve “en son kelime hariç diğerleri addır” diyebilmek gerek. Aşağıda yazacağımız count_str() fonksiyonu işte bu noktada devreye giriyor.

CREATE FUNCTION COUNT_STR(
x VARCHAR(255),
delim VARCHAR(12)
)
RETURNS INT
RETURN LENGTH(x)-LENGTH(REPLACE(x,delim,”));

Bu fonksiyon parametre olarak verdiğimiz karakterin yine parametre olarak verdiğimiz kelimenin içerisinde kaç kere geçtiğini döndürüyor. Boşluk ‘ ‘ karakteri ilgili alanda kaç kere var diye kullanırsak ‘Fehim Tabak’ için 1, ‘Yusuf Ziya Bektaş Köseoğlu’ için 3 döndürür. Bu sayının bir fazlası bize o alanda kaç kelimelik bir bilgi olduğunu yani ismin kaç kelimeden oluştuğunu döndürür.

MySQL için split fonksiyonu

Excel’den aldığım bir veriyi hazırladığım bir tabloya aktarmam gerekiyordu. Tablomda ad ve soyad sütunları ayrı ayrı olacak şekilde tasarlanmıştı ama aktarmak istediğim Excel dosyasında isim olarak tek sütun vardı. İlk iş olarak Excel dosyasını phpmyadmin yardımıyla komple bir tablo olarak veritabanına yükledim. Aktarma için kaynak tablodan select yapıp hedef tabloya insert uygulayacaktım ama bu ad, soyad sütunlarının ayrı ayrı olması işi biraz bozdu. Kaynak tablodan select yaparken isim sütunundaki veriyi kelimeler arasındaki boşluklardan yakalayıp ad ve soyadını soyadını ordan ayrı ayrı yakalamak icab ediyordu. PHP’de bu tarz bir parçalama işlemini explode() fonksiyonu ile yapmaya alışmış biri olarak keşke MySQL’de de…

iPhone Kursu 4. Ders: Tab Bar Controller

Yarın kursumuzun beşinci dersi var, bense daha dördüncü dersi yeni yazıyorum. Bugün bütün günümü üçüncü dersin ikinci kısmı olan Navigation Controller yazısını yazmaya harcadığım için -ve tahminimden çok daha uzun sürdüğü için- Tab Bar Controller’a anca sıra geldi. Uzun uzun yazmak gerçekten yorucu oluyor, ileride Video Blog şekline geçmeyi düşünebilirim.

Bu kez kısa kısa gitmeye çalışacağım. Bir önceki uzuun yazıyı iyice sindirdiyseniz temelde ondan farklı hiç bir şey yapmadığımızı göreceksiniz.

Bu dersde sıfırdan Tab Bar Controller kullanmayı göstermişti hocamız. Fakat notlarımı şirkette unuttuğum için dersteki örnek yerine yine bir önceki yazıdaki gibi Yemek Tarifleri uygulamasının başka bir versiyonu ile yazıya devam edelim. Tab Bar kullanmak asıl amacımız olacağı için daha önceki yazıda “Etli Yemekler, Zeytinyağlılar ve Çorbalar” şeklinde olan kategorileri bu kez Tab Bar’ımızın sekmeleri olarak düşünelim. Sekmelere basıldıkça birer liste çıksın ve içinde yemekler sıralansın (Table View Controller). En son sekme olarak da “Hakkımızda” sekmesini ekleyelim. Buna basıldığında programımız hakkında küçük bir bilginin yer aldığı ekran görünsün (Custom View Controller).

iPhone 3.Ders 2.Kısım: Navigation Controller ile Yemek Tarifleri Uygulaması

Kursda üçüncü dersin son kısmında hızlıca Navigation Controller’ı görmüştük fakat yazmaya fırsat bulamamıştık. İyi de oldu, çünkü tek bir yazıda uzun uzadıya bütün dersi anlatmaktansa konulara göre bölerek anlatmak daha iyi olur kanaatindeyim.

iPhone uygulamalarında en çok kullanılan view controller’lardan biri de Navigation Controller’dır. Navigation Controller’da hiyerarşik bir düzen vardır. Genelde Table View’larla beraber kullanılır. Kullanıcı ilk Table View’dan bir satıra tıkladığında o satırla ilgili yeni bir view çağrılır. Eğer bu da bir Table View ise burdaki bir satıra tıklandığında bir sonraki ilgili view çağrılır. Her bir alt kademedeyken bir üst kademeye geri dönmek için Uygulamanın üst kısmındaki bar’da geri dönüş butonları otomatik olarak çıkar (Tabi o ekran için bir title -başlık- yazmışsak).

Şimdi basit bir uygulama ile Navigation Controller’in detaylarına inelim. Yemekler adında küçük bir uygulama hazırlayalım, ilk ekranda “Etli Yemekler, Zeytinyağlılar ve Çorbalar” şeklinde yemek kategorileri listelensin. Etli Yemekler’e tıklandığında “Orman Kebabı, Hünkar Beğendi, İskender” sıralansın. Zeytinyağlılar’a tıklandığında “Taze Fasülye, İmam Bayıldı, Barbunya” sıralansın. Çorbalar’a tıklandığında “Ezo Gelin, Tarhana, Yayla, Şehriye” sıralansın. Aslında kursda bu örneği işlemedik ama nasılsa blog’da zamanımız daha bol olduğu için sindire sindire anlayalım diye bu tarz bir örnek kullanmak istedim.

Birden fazla Table View ile çalışmak

Eğer iPhone uygulamamızda birden fazla Table View kullanmak istiyorsanız ve kodlar da birbirine karışmasın diyorsanız aşağıdaki adımları takip ediniz:

  • View Based Application taslağı ile yeni bir proje oluşturun. (Bu yazı için hazırladığımız örnek projemize “CokluTablo” adını verdik. Dosya isimlendirmeleri bu şekilde yapılacaktır.)
  • Resurce klasöründeki CokluTabloViewController.xib dosyasını Interface Builder ile açıp içine Library’den 2 tane TableView  nesnesi yerleştirin. (Resim 1)
  • Xcode’a geri dönüp Classess klasörüne sağ tıklayın ve şu adımları seçin: Add -> New File -> UIViewController Subclass (seçeneklerden sadece UITableViewController subclass seçili olsun). (Resim 2)
  • Dosya adı olarak Tablo1.m yazın (Tablo1.h da otomatikmen oluşacaktır).
  • Aynı işlemi tekrar yapın ve dosya adı olarak Tablo2.m yazın.

iPhone Kursu 3. Ders: TableViewController

Malumunuz iki hafta önce Gelişim Platformu bünyesinde 60 saatlik iPhone Uygulama Geliştirme eğitime başladık. Kursda gördüğümüz konuları dilim döndüğünce burada paylaşmaya çalışıyorum. Konular ilerleyip karmaşıklaştıkça detayları paylaşmak daha yorucu olacağından şimdiden affınızı rica ediyorum.

Bu dersimizde ViewController’ları gördük. Bir kaç tanesine değindik, TableViewController ve Navigation Controller üzerinde denemeler yaptık. Diğer derslerde controller’lara devam edeceğiz.

iPhone için yazılan uygulamalar MVC (Model, View, Controller) prensibine dayanır. Kabaca ifade edersek; Model yapıları veritabanı ile olan alışverişi, View yapıları uygulamanın görsel kısımlarını oluşturur. Controller’lar ise bu ikisini koordine eden yapılardır.

XCode’da Kod Tamamlama

XCode’un yapısı çok hoşuma gitmekle beraber diğer IDE’lere nazaran bir kusuru olduğunu düşünüyordum. Kod yazarken sizi zahmetten kurtarmak için en yakın ihtimali önceden sizin yazmak üzere olduğunuz ifadeye soluk bir renkle tamamlıyor. Siz “hah buydu” diyorsanız “tab” tuşuna basıp ifadeyi yazmış gibi oluyorsunuz, “yok bu değildi” diyorsanız yazmaya devam ediyorsunuz. Siz yazdıkça o en yakın ihtimali değiştirip önünüze koyuyor. Gayet iyi bir özellik ama diğer ide’lerde bu özellik daha gelişmiş oluyor. Genelde siz yazmaya başlar başlamaz, mesela değişkeninizi yazdıkdan sonra “.” işaretini koyar koymaz bir combo-box (aşağı açılır menü) çıkar ve siz orda tüm yazabileceğiniz ihtimalleri görürsünüz. Benim gibi acemi…

Yeni XCode ile Eski Sürüm iPhone’lar için Uygulama Yazmak

XCode’nizi güncellediğinizde Overview menüsünden eski sürüm iPhone’ların kalktığını görünce ümitsizliğe düşmeyin. XCode ekranında projenizin ana dosyasına çift tıklayarak Project Info penceresini açın. En üstteki Build sekmesine tıklayıp arama alanına “deploy” yazın. Gelen listede “IPhone OS Deployment Target” seçeneğini göreceksiniz. Burada istediğiniz iPhone sürümünü işaretleyebilirsiniz. Böylece eski iPhone cihazınıza uygulamayı gönderip testlerinizi yapmaya devam edebilirsiniz. Uygulamayı yayınladığınızda da eski sürüm iPhone’ler problem yaşamazlar.

UITextField ve UITextView Kullanımında Klavyeyi Gizlemek

Eğer UITextField kullanıyorsanız yazma işi bitince klavyeyi ortadan kaldırmak çok kolay. Aşağıdaki gibi bir fonksiyon yazıp (.h dosyasına tanımlamasını da eklemeyi unutmayın) view’ınızdaki UITextField objesinin “Did on End Exit” olayında (event) bu fonksiyonun çalışmasını sağlamalısınız. – (IBAction)done:(id)sender{ [ornekTextField resignFirstResponder]; } Eğer çok satırlı bir yazı alanı ihtiyacınız varsa UITextView kullanıyorsunuz demektir. UITextView’ın malesef “Did on End Exit” gibi bir tetikleyicisi olmadığı için yukarıdaki methodu burda kullanamıyorsunuz. Bu durumu düzeltmek için hoş olmasa da işe yarayan bir kaç yöntem var. ToolBar kısmına mesela “Tamam” gibi bir buton ekleyip bu butona basıldığında yukarıdaki fonksiyonu çalıştırıp klavyeyi gizleyebilirsiniz. Ya da daha çok kullanılan…