小ネタ集
あなたの常識は
すでに通用しない
Cocoa Study #56
2012/11/23
新居雅行
1
まずはクイズ形式
誰も答えないなら
こっちから
当てるぞ !

2
文字列は続く

正しい表記でしょうか?
正しいなら、それぞれの結果と型(クラス)は?

•
•
•
•

@ abc def
@ abc @ def
abc def
"abc" @"def"

たとえば、NSLog(@”abc” “def”);...
文字列は続く

正しい表記でしょうか?
正しいなら、それぞれの結果と型(クラス)は?

•
•
•
•

@ abc def
@ abc @ def
abc def
"abc" @"def"

@”abcdef”

たとえば、NSLog(@”a...
文字列は続く

正しい表記でしょうか?
正しいなら、それぞれの結果と型(クラス)は?

•
•
•
•

@ abc def
@ abc @ def
abc def
"abc" @"def"

@”abcdef”
@”abcdef”

たとえば...
文字列は続く

正しい表記でしょうか?
正しいなら、それぞれの結果と型(クラス)は?

•
•
•
•

@ abc def
@ abc @ def
abc def
"abc" @"def"

@”abcdef”
@”abcdef”
”abcd...
文字列は続く

正しい表記でしょうか?
正しいなら、それぞれの結果と型(クラス)は?

•
•
•
•

@ abc def
@ abc @ def
abc def
"abc" @"def"

@”abcdef”
@”abcdef”
”abcd...
続く、続く、、、

こんなプログラムを書いてはまったことも

•

[NSArray arrayWithObjects: @ 10 @ 11, nil];

これがありですね

•

[NSString stringWithFormat @ Y...
プロパティ

5
プロパティ

@synthesize 一切不要になったのか?

5
プロパティ

@synthesize 一切不要になったのか?

•

NO!

5
プロパティ

@synthesize 一切不要になったのか?

•
•

NO!
プロトコルにプロパティを定義したら記述しないとだめ

5
プロパティ

@synthesize 一切不要になったのか?

•
•

NO!
プロトコルにプロパティを定義したら記述しないとだめ

@property NSString *newName は正しい?

5
プロパティ

@synthesize 一切不要になったのか?

•
•

NO!
プロトコルにプロパティを定義したら記述しないとだめ

@property NSString *newName は正しい?

•

エラーになる

5
プロパティ

@synthesize 一切不要になったのか?

•
•

NO!
プロトコルにプロパティを定義したら記述しないとだめ

@property NSString *newName は正しい?

•
•

エラーになる
newで始まる...
Xcode

6
Xcode

実話:クラス名を変更できないって本当ですか?クラス
名を変えるのにあっちこっち変更しないといけないし、
ぐちゃぐちゃになってうまくいかないので、絶対にやっ
てはいけないと、●○◎ボースクールの先生に言われま
した。変な名前のクラス...
Xcode

実話:クラス名を変更できないって本当ですか?クラス
名を変えるのにあっちこっち変更しないといけないし、
ぐちゃぐちゃになってうまくいかないので、絶対にやっ
てはいけないと、●○◎ボースクールの先生に言われま
した。変な名前のクラス...
Xcode

実話:クラス名を変更できないって本当ですか?クラス
名を変えるのにあっちこっち変更しないといけないし、
ぐちゃぐちゃになってうまくいかないので、絶対にやっ
てはいけないと、●○◎ボースクールの先生に言われま
した。変な名前のクラス...
Interface Builder

7
Interface Builder
.mファイルにクラスと同一名のカテゴリを定義すること
で、プライベートなメソッドを定義できる。ここにアウ
トレットやアクションを定義することができるか?

7
Interface Builder
.mファイルにクラスと同一名のカテゴリを定義すること
で、プライベートなメソッドを定義できる。ここにアウ
トレットやアクションを定義することができるか?

•

YES!

7
Interface Builder
.mファイルにクラスと同一名のカテゴリを定義すること
で、プライベートなメソッドを定義できる。ここにアウ
トレットやアクションを定義することができるか?

•

YES!

InterfaceBuilderに...
Interface Builder
.mファイルにクラスと同一名のカテゴリを定義すること
で、プライベートなメソッドを定義できる。ここにアウ
トレットやアクションを定義することができるか?

•

YES!

InterfaceBuilderに...
Interface Builder
.mファイルにクラスと同一名のカテゴリを定義すること
で、プライベートなメソッドを定義できる。ここにアウ
トレットやアクションを定義することができるか?

•

YES!

InterfaceBuilderに...
疲れたので
ここからは普通のプレゼン

8
Storyboard Update

UIApplicationDelegateクラスに定義されていた以下の
プロパティは未定義となった

•
•

@property NSWindow *window
たぶん、Ver.5.1から

そういえば...
Autolayout and Autosizing

Autolayoutの使用/不使用

•

ファイル単位で設定可能

Autolayout使用時のInterface Builder

•
•

右下のグレーのコントロールが増えた
Cons...
Autoresizingは何が問題か?

これをどう説明する?

•
•
•
•

上下左右は赤線だと固定
高さと幅は赤線だと可変
可変が2つ以上だと
全部固定はありえないので、右端のみ可変になる

これで問題があるパターンをWorkgroup...
回転

iOS 5まで

•
•

UIViewController # shouldAutorotateToInterfaceOrientation:
を実装して、変更可能な方向を示す
実質的に、Autosizingで回転

iOS 6以降
...
回転にいかに対応するか?
アプリケーション起動時

•
•
•

iPhone, iPod touch、ポートレイトに必ずなる
iPad:そのときの方向になるが、
didRotateFromInterfaceOrientation:などは呼び出...
Autosizingでは
コントロール
しきれない例

14
ローカライズ

15
16
Base Internationalization
ibtoolsでstringsファイル生成やマージをしていたのが
完全に自動化された

17
あなたの疑問はみんなの疑問
情報共有しましょう

18
Upcoming SlideShare
Loading in …5
×

Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない

1,263 views

Published on

Cocoa勉強会#56
2012/11/23
小ネタ集あなたの常識はすでに通用しない
新居雅行

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,263
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない

  1. 1. 小ネタ集 あなたの常識は すでに通用しない Cocoa Study #56 2012/11/23 新居雅行 1
  2. 2. まずはクイズ形式 誰も答えないなら こっちから 当てるぞ ! 2
  3. 3. 文字列は続く 正しい表記でしょうか? 正しいなら、それぞれの結果と型(クラス)は? • • • • @ abc def @ abc @ def abc def "abc" @"def" たとえば、NSLog(@”abc” “def”); がどうなるか?みたいな 3
  4. 4. 文字列は続く 正しい表記でしょうか? 正しいなら、それぞれの結果と型(クラス)は? • • • • @ abc def @ abc @ def abc def "abc" @"def" @”abcdef” たとえば、NSLog(@”abc” “def”); がどうなるか?みたいな 3
  5. 5. 文字列は続く 正しい表記でしょうか? 正しいなら、それぞれの結果と型(クラス)は? • • • • @ abc def @ abc @ def abc def "abc" @"def" @”abcdef” @”abcdef” たとえば、NSLog(@”abc” “def”); がどうなるか?みたいな 3
  6. 6. 文字列は続く 正しい表記でしょうか? 正しいなら、それぞれの結果と型(クラス)は? • • • • @ abc def @ abc @ def abc def "abc" @"def" @”abcdef” @”abcdef” ”abcdef” たとえば、NSLog(@”abc” “def”); がどうなるか?みたいな 3
  7. 7. 文字列は続く 正しい表記でしょうか? 正しいなら、それぞれの結果と型(クラス)は? • • • • @ abc def @ abc @ def abc def "abc" @"def" @”abcdef” @”abcdef” ”abcdef” エラー たとえば、NSLog(@”abc” “def”); がどうなるか?みたいな 3
  8. 8. 続く、続く、、、 こんなプログラムを書いてはまったことも • [NSArray arrayWithObjects: @ 10 @ 11, nil]; これがありですね • [NSString stringWithFormat @ You know that I was working for %@. But it s better than %@ , a, b]; 4
  9. 9. プロパティ 5
  10. 10. プロパティ @synthesize 一切不要になったのか? 5
  11. 11. プロパティ @synthesize 一切不要になったのか? • NO! 5
  12. 12. プロパティ @synthesize 一切不要になったのか? • • NO! プロトコルにプロパティを定義したら記述しないとだめ 5
  13. 13. プロパティ @synthesize 一切不要になったのか? • • NO! プロトコルにプロパティを定義したら記述しないとだめ @property NSString *newName は正しい? 5
  14. 14. プロパティ @synthesize 一切不要になったのか? • • NO! プロトコルにプロパティを定義したら記述しないとだめ @property NSString *newName は正しい? • エラーになる 5
  15. 15. プロパティ @synthesize 一切不要になったのか? • • NO! プロトコルにプロパティを定義したら記述しないとだめ @property NSString *newName は正しい? • • エラーになる newで始まる名前はだめ 5
  16. 16. Xcode 6
  17. 17. Xcode 実話:クラス名を変更できないって本当ですか?クラス 名を変えるのにあっちこっち変更しないといけないし、 ぐちゃぐちゃになってうまくいかないので、絶対にやっ てはいけないと、●○◎ボースクールの先生に言われま した。変な名前のクラスにしちゃったけど、最初から作 り直さないといけないの? 6
  18. 18. Xcode 実話:クラス名を変更できないって本当ですか?クラス 名を変えるのにあっちこっち変更しないといけないし、 ぐちゃぐちゃになってうまくいかないので、絶対にやっ てはいけないと、●○◎ボースクールの先生に言われま した。変な名前のクラスにしちゃったけど、最初から作 り直さないといけないの? • No!!!! Oh, No! 6
  19. 19. Xcode 実話:クラス名を変更できないって本当ですか?クラス 名を変えるのにあっちこっち変更しないといけないし、 ぐちゃぐちゃになってうまくいかないので、絶対にやっ てはいけないと、●○◎ボースクールの先生に言われま した。変な名前のクラスにしちゃったけど、最初から作 り直さないといけないの? • • No!!!! Oh, No! Xcodeのリファクタリングはそこそこ使えます 6
  20. 20. Interface Builder 7
  21. 21. Interface Builder .mファイルにクラスと同一名のカテゴリを定義すること で、プライベートなメソッドを定義できる。ここにアウ トレットやアクションを定義することができるか? 7
  22. 22. Interface Builder .mファイルにクラスと同一名のカテゴリを定義すること で、プライベートなメソッドを定義できる。ここにアウ トレットやアクションを定義することができるか? • YES! 7
  23. 23. Interface Builder .mファイルにクラスと同一名のカテゴリを定義すること で、プライベートなメソッドを定義できる。ここにアウ トレットやアクションを定義することができるか? • YES! InterfaceBuilderにオブジェクトを配置することと、ア ウトレットあるいはアクションのプロパティ(あるいは メンバ変数)の両方を定義しないと、ドラッグして結合 はできない 7
  24. 24. Interface Builder .mファイルにクラスと同一名のカテゴリを定義すること で、プライベートなメソッドを定義できる。ここにアウ トレットやアクションを定義することができるか? • YES! InterfaceBuilderにオブジェクトを配置することと、ア ウトレットあるいはアクションのプロパティ(あるいは メンバ変数)の両方を定義しないと、ドラッグして結合 はできない • NO! 7
  25. 25. Interface Builder .mファイルにクラスと同一名のカテゴリを定義すること で、プライベートなメソッドを定義できる。ここにアウ トレットやアクションを定義することができるか? • YES! InterfaceBuilderにオブジェクトを配置することと、ア ウトレットあるいはアクションのプロパティ(あるいは メンバ変数)の両方を定義しないと、ドラッグして結合 はできない • • NO! control+プログラム中の空白の位置へのドラッグ! 7
  26. 26. 疲れたので ここからは普通のプレゼン 8
  27. 27. Storyboard Update UIApplicationDelegateクラスに定義されていた以下の プロパティは未定義となった • • @property NSWindow *window たぶん、Ver.5.1から そういえば… • Launch Imagesがないタイプの解像度にはならないという仕様は どうよ? 9
  28. 28. Autolayout and Autosizing Autolayoutの使用/不使用 • ファイル単位で設定可能 Autolayout使用時のInterface Builder • • 右下のグレーのコントロールが増えた Constraintに対してアウトレットと結合できる iOSでもAutoresizing • 実はいままでもいくらか問題にはなっていたけど、かなり顕在化し てきたと言える 10
  29. 29. Autoresizingは何が問題か? これをどう説明する? • • • • 上下左右は赤線だと固定 高さと幅は赤線だと可変 可変が2つ以上だと 全部固定はありえないので、右端のみ可変になる これで問題があるパターンをWorkgroup Managerでみ ることができる 11
  30. 30. 回転 iOS 5まで • • UIViewController # shouldAutorotateToInterfaceOrientation: を実装して、変更可能な方向を示す 実質的に、Autosizingで回転 iOS 6以降 • • • 何もしなくても回転する Info.plistで回転可能な方向を示す Autolayoutで回転が基本だが、AutosizingにしてiOS 5互換に 12
  31. 31. 回転にいかに対応するか? アプリケーション起動時 • • • iPhone, iPod touch、ポートレイトに必ずなる iPad:そのときの方向になるが、 didRotateFromInterfaceOrientation:などは呼び出されない UIViewControllerのinterfaceOrientationプロパティで現状は分か る シンプルなレイアウトなら、縦横共有は可能 要はiOS 5までが非常にまずかっただけでは? • iPadでランドスケープ状態で起動したときに、通常とは異なるメソ ッド呼び出しになったり、初期状態ではポートレイトと認識された りとけっこう苦労したが… 13
  32. 32. Autosizingでは コントロール しきれない例 14
  33. 33. ローカライズ 15
  34. 34. 16
  35. 35. Base Internationalization ibtoolsでstringsファイル生成やマージをしていたのが 完全に自動化された 17
  36. 36. あなたの疑問はみんなの疑問 情報共有しましょう 18

×