Iphone 101

Iphone için programlamayı öğrenirken deneyimlerimi bu blogda paylaşacağım.

Friday, 30 October 2009

Dinamik olarak bir objenin property lerine erişim

Runtime sırasında bir objective c objesinin property lerine erişmek , değerler set etmek mümkün. Örneğin bir object ' in column1 adlı bir property si olsun.

Bu property ye değer set etmek için self.column1= deger  diyerek bir değer atayabilirsiniz.

Bunu yapmanın bir başka yolu ise şöyle


[self setValue: deger forKey:@"column1"];


Değeri okumak için ise



 id *value = [self valueForKey:@"column1"]; 







Mesajın Selector yoluyla yollanması

Objective C deki Selector mekanizması ile bir mesajı (metod çağrısını) asenkron olarak istediğiniz bir delay ' den sonra çağırabilirsiniz. Selector ' lar C deki Function Pointer lara benziyor.

-(void) showButton {
--
}

gibi bir metodunuz varsa bu metod için selector ' i

@selector(showButton) şeklinde oluşturmak mümkün.

Bu metodun parametleri olsaydı örneğin

-(void) showButton:(id) view action:(NSString*) action {
}

selector şu şekilde olurdu. @selector(showButton:id:action)

Çağrılmasına gelince



[self performSelector:@selector(showButton) 
            withObject:nil 
            afterDelay:.5]; 

afterDelay ile gecikmeyi veriyorsunuz. İşlem belirtilen saniye süresince bekledikten sonra çağrılıyor. 

Bundle ' dan herhangi bir dosyanın path'ini almak

Diyelim ki bir uygulama içindeki bir dosyanın path ' ine ihtiyacınız var. Örneğin bir wav uzantılı bir dosya. Dosyanın path ' ini alan başka bir api kullanıyorsunuz.

Path bilgisinin almak için aşağıdaki kod yeterli olacaktır.


NSString *path = [[NSBundle mainBundle] pathForResource:@"ornek" ofType:@"wav"]; 


Bu projedeki ornek.wav dosyasinin yerini döndürecektir. 

UIPickerViewDelegate ' dan View veya NSString döndürmek

UIPickerViewDelegate, UIPickerView bileşeni tarafından delege işlemlerle ilgili mesajları alan bileşendir. Genellikle bu metodlar controller ' da UIPickerViewDelegate protokolunu uygulanmasıyla yer alır.

UIPickerViewDelegate UIPickerView ' un kaç bölümden (component) oluşacağı, her bölümde kaç eleman olacağını ve elemanlarla ilgili dataları aldığı metodlar barındırır.

Picker içinde gösterilecek bilgi View veya NSString* olarak verilebilir. Bunun için 2 ayrı metod var. UIView döndüren metodu eğer image göstermek istiyorsanız kullanabilirsiniz.





- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component {
    return [pickerData objectAtIndex:row];
}

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row  forComponent:(NSInteger)component reusingView:(UIView *)view {
 return [imageViewArray objectAtIndex:row]İ
}


NSArray oluştururken

NSArray oluştururken en çok yaptığım hata initWithObjects ile elemanlarını verirken nil vermemek son eleman olarak.  Örneğin aşağıdaki tanım runtime ' da hataya neden oluyor.


NSArray *imageArray = [[NSArray alloc] initWithObjects: appleView,barView,cherryView,lemonView,sevenView];


Doğrusu sevenView dan sonra nil eklemek


NSArray *imageArray = [[NSArray allocinitWithObjects: appleView,barView,cherryView,lemonView,sevenView,nil];

Monday, 26 October 2009

IPhone uygulamalarında kullanılabilecek button imageları

IPhone SDK de eksik olan şeylerden biri Round Rect Button ' lar için kullanılabilecek image lar.  Çoğu uygulamanın güzel görünmesini sağlayan bu tür image ' lar oluyor.

http://www.glyphish.com/ adresinde geniş bir button image kütüphanesi bulabilir ve ücretsiz kullanabilirsiniz...

XCode ' da .h ile .m arası geçiş için

XCode ' da verimlilik düşmanı durumlardan biri bir Objective C class ' ının interface ' i (.h uzantılı dosya) ile implementation'i (.m uzantılı dosya) arasında geçişlerde mouse kullanıyor olmak.

.h ile .m uzantılı dosya arasında geçiş yapmak için kısa yol tuşu Alt + Cmd + Yukarı Ok tuşu. Interface  Implementation arası geçişleri yapıyor.