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

Preview:

DESCRIPTION

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

Citation preview

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

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

1

まずはクイズ形式

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

2

文字列は続く

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

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

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

文字列は続く

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

@”abcdef”

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

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

文字列は続く

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

@”abcdef”

@”abcdef”

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

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

文字列は続く

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

@”abcdef”

@”abcdef”

”abcdef”

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

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

文字列は続く

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

@”abcdef”

@”abcdef”

”abcdef”

エラー

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

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

続く、続く、、、

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

4

プロパティ

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で始まる名前はだめ

5

Xcode

6

Xcode

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

6

Xcode

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

6

Xcode

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

6

Interface Builder

7

Interface Builder

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

7

Interface Builder

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

7

Interface Builder

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

7

Interface Builder

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

7

Interface Builder

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

7

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

8

Storyboard Update

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

9

Autolayout and Autosizing

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

10

Autoresizingは何が問題か?

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

11

回転

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

12

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

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

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

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

13

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

14

ローカライズ

15

16

Base Internationalization

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

17

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

18