Cocoapods Resource with AFNetworking

Command line kullanımı bir çok kez çileye dönebiliyor. Aşağıdaki videoda gayet detaylı ve iyi bir anlatım var.

Ayrıca şuna da bakmanızda fayda var.
http://stackoverflow.com/questions/3136648/how-do-i-exit-vim-when-doing-a-mercurial-commit-at-the-command-line
http://www.raywenderlich.com/12139/introduction-to-cocoapods
http://code.tutsplus.com/tutorials/streamlining-cocoa-development-with-cocoapods–mobile-15938

Advertisements

iOS Hide Keyboard

iOS geliştirmede text ile ilgili bir işlem yaptığınızda keyboard altta çakılı kalır. Bunu önlemek için keyboardı kullandığımız ViewController’da aşağıdaki methodu kullanabiliriz.


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

Ya da kendiniz bir buton ekleyip keyboardi gizlemek isteyebilirsiniz bunun için bir IBAction tanımlayıp aşağıdaki kod işinizi görecektir. Aşağıdaki kodu view’ınızda bir button olduğunu ve eventi hook-up(bağlama) yaptığınızı varsarayarak yazıyorum.


- (IBAction)backButtonAction:(id)sender
{
      [self.view endEditing:YES];
}

UIImagePickerDelegate sorunsalı

Objective-C’de UIImagePickerDelegate objesini kullanıyorsanız, yani bir düğmeye basılıp bir photolibrary benzeri bir şey açtırıyorsanız delegate objesinde problem yaşabilirsiniz yani şöyle ;

Interface file:

@interface ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationBarDelegate>

@property (weak, nonatomic) IBOutlet UITextField *firstNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *lastNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *ageTextField;
@property (weak, nonatomic) IBOutlet UIImageView *contactImageView;
@property (strong,nonatomic) UIImagePickerController *imagePicker;

- (IBAction)saveImageAction:(id)sender;
- (IBAction)chooseImageAction:(id)sender;


@end

Yukarıdaki kodda basit olarak bir kaç değişken oluşturuyoruz. Ve delegation olarak kullanacağımız UIImagePickerControllerDelegate ve UINavigationBarDelegate sınıflarından kalıtım yapıyoruz. Daha sonra kodda PickerView’i kullanmak istediğimizde hata ile karşılaşıyoruz yani şu işlemi yaptığımızda;

- (IBAction)chooseImageAction:(id)sender
{
    self.imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self; // <--- burada hata.
    imagePicker.allowsEditing = YES;
    imagePicker.sourceType    = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:imagePicker animated:YES completion:nil];
}

Yukarıda yorumda da belirttiğim yerde hata ile karşılaşıyoruz. Bunun sebebi delegate objesini self objesinde araması ama herhangi bir delegation bulunmuyor. Aşağıdaki kodu hem interface hem de implementation dosyalarına eklediğimde düzgün bir şekilde çalışıyor.

implementation

- (IBAction)chooseImageAction:(id)sender
{
    self.imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self.delegate; <--- Yeni eklediğim delegation 
    imagePicker.allowsEditing = YES;
    imagePicker.sourceType    = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:imagePicker animated:YES completion:nil];
}

interface

@interface ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationBarDelegate>

@property (weak, nonatomic) IBOutlet UITextField *firstNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *lastNameTextField;
@property (weak, nonatomic) IBOutlet UITextField *ageTextField;
@property (weak, nonatomic) IBOutlet UIImageView *contactImageView;
@property (strong,nonatomic) UIImagePickerController *imagePicker;
// Aşağıdaki delegation'ı eklemek gerekiyor
@property (nonatomic, assign) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;

- (IBAction)saveImageAction:(id)sender;
- (IBAction)chooseImageAction:(id)sender;


@end

Kaynaklar :

https://developer.apple.com/library/ios/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/occ/instp/UIImagePickerController/delegate

Sonradan gelen düzenleme : Interface sınıfında class tanımlamasının yanına ;

<UINavigationControllerDelegate, UIImagePickerControllerDelegate>

şeklinde bir deklarasyon yaparsak sorun da düzelmiş olur ve bu sayede

self.delegate

şeklinde misar alabiliriz.

Declare NSMutableDictionary and Useful methods

Başlıktan da anlaşıldığı gibi çoğu zaman işime yaracak olan Dictionary objesinin faydalı methodlarını buraya yazıyorum. Elimin altında bulunsun buda.
Commentleri kaldırıp logları kontrol ederek ilerlenilmesi gerekiyor.

// first dictionary
        NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
        [mutableDic setObject:@"Elma"   forKey:@"1"];
        [mutableDic setObject:@"Armut"  forKey:@"2"];
        [mutableDic setObject:@"Karpuz" forKey:@"3"];
        //NSLog(@"\n\nmutableDic dictionary's first value is : %@\n\n", [mutableDic objectForKey:@"1"]);
        
        // second dictionary
        NSMutableDictionary *secondDic  = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Elma",@"1",@"Armut",@"2",@"Karpuz",@"3", nil];
        //NSLog(@"\n\nsecondDic dictionary's first value is : %@\n\n", [secondDic objectForKey:@"1"]);
        
        // third dictionary
        NSArray *objectsArray = [NSArray arrayWithObjects:@"Elma",@"Armut",@"Karpuz", nil];
        NSArray *keysArray    = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
        
        NSMutableDictionary *thirdDic = [[NSMutableDictionary alloc] initWithObjects:objectsArray forKeys:keysArray];
        [thirdDic setObject:@"Kiraz" forKey:@"4"];
        NSLog(@"all values : %@ ", thirdDic);
        
        [thirdDic removeObjectForKey:@"4"];
        NSLog(@"all values after remove one object : %@ ", thirdDic);
        
        [thirdDic removeAllObjects];
        NSLog(@"after removed all object from dictionary : %@ ", thirdDic);

        //NSLog(@"\n\nthirdDic dictionary's first value is : %@\n\n", [thirdDic objectForKey:@"1"]);

Create own block method

Blocklar belirli bir işlemi yerine getirmek için oldukça işe yarayan bir design pattern. Burada elimin altında bulunsun diye bunu ekliyorum.

// Declare property
@property (strong) int (^mathBlock)(int, int); // Use copy if not using ARC
 
// Synthesize property
@synthesize mathBlock = _mathBlock;
 
// Store block so you can call it later
- (void)doMathWithBlock:(int (^)(int, int))mathBlock {
    self.mathBlock = mathBlock;
}
 
// Calling that method with a block
- (IBAction)buttonTapped:(id)sender {
    [self doMathWithBlock:^(int a, int b) {
        return a + b;
    }];
}
 
// Later on...
- (IBAction)button2Tapped:(id)sender {
    self.label.text = [NSString stringWithFormat:@"%d", self.mathBlock(3, 5)];
}

NavigationController with .xib File

Sometimes we wants to use different views and navigation controller for better user usability. For this reason we should use .xib file on behalf optimal control. Here all we need to do pretty basic!

Firstly go to File > New > File afterwards under the ios tab we are going to choose “Cocoa Touch > Objective-C Class” click and next.  Class name : FirstViewController and Subclass of UIViewController and don’t forget “Also create XIB File” option check. That’s it! Time to write little code!

AppDelegate Files are :

Interface File

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

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong,nonatomic) FirstViewController  *firstViewController;
@property (strong,nonatomic) UINavigationController *navController;

@end

Implementation File


#import "AppDelegate.h"

@implementation AppDelegate

@synthesize navController;
@synthesize firstViewController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    // Setting first view controller
    self.firstViewController = [[FirstViewController alloc] initWithNibName:nil bundle:nil];
    self.firstViewController.title = @"First View Controller";
    self.navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];
    [self.window setRootViewController:self.navController];
    [self.window makeKeyAndVisible];
    return YES;
}

You have to notice that I’ve set rootViewController to my firstViewController.
Also we have two UIViewController for to navigate each of them.

FirstViewController :

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

@interface FirstViewController : UIViewController

@property (nonatomic,strong) SecondViewController *secondViewController;

-(IBAction) pushSecondView:(UIButton *)sender;

@end


#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

@synthesize secondViewController;

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

-(SecondViewController *) secondViewController
{
    if(!secondViewController) {
        secondViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
        secondViewController.title = @"Second View Controller";
    }
    return secondViewController;
}

-(void)pushSecondView:(UIButton *)sender
{
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

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

@end

SecondViewController

Interface

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

@interface SecondViewController : UIViewController

@property(nonatomic,strong) ThirdViewController *thirdViewController;

-(IBAction)gotoThirdScene:(UIButton *)sender;

@end


Implementation


#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

@synthesize thirdViewController;

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

#pragma mark Lazly instantiate
-(ThirdViewController *) thirdViewController
{
    if(!thirdViewController) {
        thirdViewController = [[ThirdViewController alloc] initWithNibName:nil bundle:nil];
        thirdViewController.title = @"Third View Controller";
    }
    return thirdViewController;
}


-(void)gotoThirdScene:(UIButton *)sender
{
    [self.navigationController pushViewController:self.thirdViewController animated:YES];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

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

@end