2014年6月27日 星期五

tabBarController切換頁面

//如果沒有navigationController的情況,換到第五頁
[(UITabBarController*)self.tabBarController setSelectedIndex:4];

//如果有navigationController的情況,換到第五頁
[(UITabBarController*)self.navigationController.tabBarController setSelectedIndex:4];

//重點
用self.navigationController取得當前view controller的navigationController
用self.tabBarController取得當前view controller的tabBarController

2014年5月28日 星期三

把NSString宣告為常數

錯誤的宣告方式
會出現warning:(Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers)
.h
extern NSString * SelectionSort;
.m
const NSString *InsertionSort = @"SelectionSort";


正確的宣告方式
.h
extern NSString *const SelectionSort;
.m
NSString *const SelectionSort = @"SelectionSort";

2014年5月27日 星期二

亂數取法

  1. arc4random() 回傳 int 的任意整數
    • int value = arc4random() % x; // 回傳 0 ~ x-1 之間的任意整數
  2. CCRANDOM_0_1() ; //在cocos2D中使用,回傳0 ~ 1之間的任意浮點數
    • float random = CCRANDOM_0_1() * 5; //回傳0~5間的任意浮點數
  3. random()可以輸入亂數種子的任意數
    • random((unsigned int)time(time_t *)NULL);//輸入時間種子

2014年5月26日 星期一

(id)sender

//從UI中拉線所生成的方法中,sender永遠是主動呼叫這個方法的那個UI物件
- (IBAction)unitValueChanged:(id)sender
{
    UISegmentedControl *sc = (UISegmentedControl*)sender;
    _settingEntity.unit = [NSNumber numberWithInteger:sc.selectedSegmentIndex];
    [_settingEntity update];

}

2014年5月22日 星期四

確認objective c方法參數的指標是assign或copy

//結論:method的參數是assign,也就是不做copy直接傳入指標

//確認參數的指標為copyassign
    NSMutableArray *array = [@[@1,@2] mutableCopy];
    [concept checkParameterPointer:array];
    NSLog(@"array : %@", array);

+ (void) checkParameterPointer:(NSMutableArray *)array{
    NSMutableArray *a = array;
    NSLog(@"1. a=%@", a);
    [a addObject:@5];
    NSLog(@"2. a=%@", a);

}

//執行結果
2014-05-22 18:15:40.349 ConceptComfirm[47546:60b] viewDidLoad
2014-05-22 18:15:40.362 ConceptComfirm[47546:60b] class : Concepts
2014-05-22 18:15:40.363 ConceptComfirm[47546:60b] 1. a=(
    1,
    2
)
2014-05-22 18:15:40.363 ConceptComfirm[47546:60b] 2. a=(
    1,
    2,
    5
)
2014-05-22 18:15:40.363 ConceptComfirm[47546:60b] array : (
    1,
    2,
    5
)
2014-05-22 18:15:40.389 ConceptComfirm[47546:60b] viewWillAppear
2014-05-22 18:15:40.448 ConceptComfirm[47546:60b] viewDidAppear

確認objective c的物件指標是assign或copy

//結論
對不能改變內容的物件(NSString, NSArray...)沒有差別,因為都是new一個新的;
對能改變內容的物件(NSMutableString, NSMutableArray...)差很多,如果assign是指到同一個記憶體位置,copy的話才會複製成另外一份。

//測試方法
    NSString *a = @"a";
    NSLog(@"1. a=%@",a);
    NSString *b = [a copy];
    NSString *c = a;
    b = @"b";
    a = @"c";
    NSLog(@"2. a=%@  b=%@  c=%@", a, b, c);
    
    NSMutableArray *aa = [@[@1,@2] mutableCopy];
    NSLog(@"1. aa=%@",aa);
    NSArray *bb = [aa copy];
    NSMutableArray *cc = aa;
    bb = @[@3,@4];
    [cc addObject:@5];

    NSLog(@"2. aa=%@  bb=%@  cc=%@", aa, bb, cc);

//執行結果
2014-05-22 17:26:25.285 ConceptComfirm[46837:60b] viewDidLoad
2014-05-22 17:26:25.286 ConceptComfirm[46837:60b] class : Concepts
2014-05-22 17:26:25.286 ConceptComfirm[46837:60b] 1. a=a
2014-05-22 17:26:25.286 ConceptComfirm[46837:60b] 2. a=c  b=b  c=a
2014-05-22 17:26:25.286 ConceptComfirm[46837:60b] 1. aa=(
    1,
    2
)
2014-05-22 17:26:25.286 ConceptComfirm[46837:60b] 2. aa=(
    1,
    2,
    5
)  bb=(
    3,
    4
)  cc=(
    1,
    2,
    5
)
2014-05-22 17:26:25.287 ConceptComfirm[46837:60b] viewWillAppear
2014-05-22 17:26:25.514 ConceptComfirm[46837:60b] viewDidAppear