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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

小ネタ集あなたの常識はすでに通用しない

Cocoa Study #562012/11/23新居雅行

1

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

まずはクイズ形式

誰も答えないならこっちから当てるぞ !

2

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

文字列は続く

正しい表記でしょうか?正しいなら、それぞれの結果と型(クラス)は?• @”abc” “def”• @”abc” @“def”• ”abc” “def”• "abc" @"def"

たとえば、NSLog(@”abc” “def”);

がどうなるか?みたいな3

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

文字列は続く

正しい表記でしょうか?正しいなら、それぞれの結果と型(クラス)は?• @”abc” “def”• @”abc” @“def”• ”abc” “def”• "abc" @"def"

@”abcdef”

たとえば、NSLog(@”abc” “def”);

がどうなるか?みたいな3

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

文字列は続く

正しい表記でしょうか?正しいなら、それぞれの結果と型(クラス)は?• @”abc” “def”• @”abc” @“def”• ”abc” “def”• "abc" @"def"

@”abcdef”

@”abcdef”

たとえば、NSLog(@”abc” “def”);

がどうなるか?みたいな3

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

文字列は続く

正しい表記でしょうか?正しいなら、それぞれの結果と型(クラス)は?• @”abc” “def”• @”abc” @“def”• ”abc” “def”• "abc" @"def"

@”abcdef”

@”abcdef”

”abcdef”

たとえば、NSLog(@”abc” “def”);

がどうなるか?みたいな3

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

文字列は続く

正しい表記でしょうか?正しいなら、それぞれの結果と型(クラス)は?• @”abc” “def”• @”abc” @“def”• ”abc” “def”• "abc" @"def"

@”abcdef”

@”abcdef”

”abcdef”

エラー

たとえば、NSLog(@”abc” “def”);

がどうなるか?みたいな3

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

続く、続く、、、

こんなプログラムを書いてはまったことも• [NSArray arrayWithObjects: @”10” @”11, nil];これがありですね• [NSString stringWithFormat @”You know that I was “ “working for %@. But it’s better than %@”, a, b];

4

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

プロパティ

5

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

プロパティ

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

5

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

プロパティ

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

5

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

プロパティ

@synthesize 一切不要になったのか?• NO!• プロトコルにプロパティを定義したら記述しないとだめ

5

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

プロパティ

@synthesize 一切不要になったのか?• NO!• プロトコルにプロパティを定義したら記述しないとだめ@property NSString *newName は正しい?

5

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

プロパティ

@synthesize 一切不要になったのか?• NO!• プロトコルにプロパティを定義したら記述しないとだめ@property NSString *newName は正しい?• エラーになる

5

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

プロパティ

@synthesize 一切不要になったのか?• NO!• プロトコルにプロパティを定義したら記述しないとだめ@property NSString *newName は正しい?• エラーになる• newで始まる名前はだめ

5

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

Xcode

6

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

Xcode

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

6

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

Xcode

実話:クラス名を変更できないって本当ですか?クラス名を変えるのにあっちこっち変更しないといけないし、ぐちゃぐちゃになってうまくいかないので、絶対にやってはいけないと、●○◎ボースクールの先生に言われました。変な名前のクラスにしちゃったけど、最初から作り直さないといけないの?• No!!!! Oh, No!

6

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

Xcode

実話:クラス名を変更できないって本当ですか?クラス名を変えるのにあっちこっち変更しないといけないし、ぐちゃぐちゃになってうまくいかないので、絶対にやってはいけないと、●○◎ボースクールの先生に言われました。変な名前のクラスにしちゃったけど、最初から作り直さないといけないの?• No!!!! Oh, No!• Xcodeのリファクタリングはそこそこ使えます

6

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

Interface Builder

7

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

Interface Builder

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

7

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

Interface Builder

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

7

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

Interface Builder

.mファイルにクラスと同一名のカテゴリを定義することで、プライベートなメソッドを定義できる。ここにアウトレットやアクションを定義することができるか?• YES!InterfaceBuilderにオブジェクトを配置することと、アウトレットあるいはアクションのプロパティ(あるいはメンバ変数)の両方を定義しないと、ドラッグして結合はできない

7

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

Interface Builder

.mファイルにクラスと同一名のカテゴリを定義することで、プライベートなメソッドを定義できる。ここにアウトレットやアクションを定義することができるか?• YES!InterfaceBuilderにオブジェクトを配置することと、アウトレットあるいはアクションのプロパティ(あるいはメンバ変数)の両方を定義しないと、ドラッグして結合はできない• NO!

7

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

Interface Builder

.mファイルにクラスと同一名のカテゴリを定義することで、プライベートなメソッドを定義できる。ここにアウトレットやアクションを定義することができるか?• YES!InterfaceBuilderにオブジェクトを配置することと、アウトレットあるいはアクションのプロパティ(あるいはメンバ変数)の両方を定義しないと、ドラッグして結合はできない• NO!• control+プログラム中の空白の位置へのドラッグ!

7

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

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

8

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

Storyboard Update

UIApplicationDelegateクラスに定義されていた以下のプロパティは未定義となった• @property NSWindow *window• たぶん、Ver.5.1からそういえば…• Launch Imagesがないタイプの解像度にはならないという仕様はどうよ?

9

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

Autolayout and Autosizing

Autolayoutの使用/不使用• ファイル単位で設定可能Autolayout使用時のInterface Builder• 右下のグレーのコントロールが増えた• Constraintに対してアウトレットと結合できるiOSでもAutoresizing• 実はいままでもいくらか問題にはなっていたけど、かなり顕在化してきたと言える

10

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

Autoresizingは何が問題か?

これをどう説明する?• 上下左右は赤線だと固定• 高さと幅は赤線だと可変• 可変が2つ以上だと• 全部固定はありえないので、右端のみ可変になるこれで問題があるパターンをWorkgroup Managerでみることができる

11

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

回転

iOS 5まで• UIViewController # shouldAutorotateToInterfaceOrientation:を実装して、変更可能な方向を示す• 実質的に、Autosizingで回転iOS 6以降• 何もしなくても回転する• Info.plistで回転可能な方向を示す• Autolayoutで回転が基本だが、AutosizingにしてiOS 5互換に

12

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

回転にいかに対応するか?

アプリケーション起動時• iPhone, iPod touch、ポートレイトに必ずなる• iPad:そのときの方向になるが、didRotateFromInterfaceOrientation:などは呼び出されない• UIViewControllerのinterfaceOrientationプロパティで現状は分かる

シンプルなレイアウトなら、縦横共有は可能

要はiOS 5までが非常にまずかっただけでは?• iPadでランドスケープ状態で起動したときに、通常とは異なるメソッド呼び出しになったり、初期状態ではポートレイトと認識されたりとけっこう苦労したが…

13

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

Autosizingではコントロールしきれない例

14

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

ローカライズ

15

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

16

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

Base Internationalization

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

17

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

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

18