2012年2月29日水曜日

[iPhoneSDK]UIViewController Managing the View (ビュー管理)関係の関数

毎度忘れるのでメモをとっておく

– (void)loadView
ビューがロードされる時に呼び出される。

- (void)viewDidLoad
ビューがロードされた後に呼び出される。

- (void)viewWillAppear:(BOOL)animated
ビューが描画される前やアニメーションが始まる前にこの処理が呼ばれる。

- (void)viewWillDisappear:(BOOL)animated
ビューが非表示にされる前や解放される前にこの処理が呼ばれる。


呼びさされた後にsuperで元の呼び出しを行うこと
- (void)loadView {
    [super loadView];
}

2012年2月27日月曜日

[iOS]XCode4が重い

「iOS5でバグが出て修正が必要なのにXcode4が重くてイライラしする現象」を修正してみた。

どうやらmacのキャッシュを消せば軽くなるらしい。
キャッシュを消したところ、
旧mac miniで常時30%のcpu使用率が一桁まで減った。
オートコンプリート機能でクラッシュするのも直った。

ただしキャッシュを消すと何が起こるか分からないのでくれぐれも自己責任で

(ユーザーネーム)>ライブラリ> Caches
Macintosh HD>ライブラリ>Caches

のキャッシュを消してmac再起動

危険だけど、どのファイルがxcodeのキャッシュなのか分からないのでとりあえず全部消してみたが
mac miniをハンマーで叩き割るよりはスマートだと思う

追記
キャッシュを消したところテキストツールなどで文字化けするようになったが、再起動でなおった。
さすがにすべてのキャッシュ削除は乱暴すぎるかも。

project.xcworkspaceを削除するという方法もあった。
Yomo

2012年2月11日土曜日

[iOS]writeToFileでfalseが返る

NSDictionaryでwriteToFileでfalseが返る

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"config.plist"];
NSMutableDictionary *configDict = [NSMutableDictionary dictionaryWithContentsOfFile:path];
[configDict setObject:newDict forKey:@"newDict"];
if ([configDict writeToFile:path2 atomically:YES]) {
     TRACE("OK");
} else {
     TRACE("NG");
}

writeToFileでエラーが"NG"が返るのでずっと悩んでたんだが
理由はこれ
This method recursively validates that all the contained objects are property list objects (instances of NSDataNSDateNSNumberNSString,NSArray, or NSDictionary) before writing out the file, and returns NO if all the objects are not property list objects, since the resultant file would not be a valid property list.

このメソッドの再帰的に含まれているすべてのオブジェクトは、ファイルを書き出す前に、プロパティリストオブジェクト(NSDataの、NSDate、NSNumber、NSString、NSArray、またはNSDictionaryのインスタンス)であることを検証しておらず、すべてのオブジェクトがプロパティリストオブジェクトでない場合はNOを返すので結果ファイルが有効なプロパティのリストではありません。

objectがおかしいよってことで
[configDict setObject:newDict forKey:@"newDict"];
のnewDictにNSDictionaryっぽくないデータが入っていた
plistはこんな感じなる
key = value

newDictの中身はこうなっていた
"key" = value
JSONからの変換時に""が付与されてwriteToFileができなかったというというオチ