- (void)viewDidAppear:(BOOL)animated
{
timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(someSelector) userInfo:nil repeats:YES] ;
}
といった感じでタイマーをセットしたが、viewが表示されても一向に someSelector が呼ばれない。
viewController の呼び出し場所によっては、同じコードでも呼ばれるときがある。
調べた結果以下のようにメインスレッドでタイマーをセットすると呼ばれるようになりました。
- (void)startTimer
{
timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(someSelector) userInfo:nil repeats:YES] ;
}
- (void)viewDidAppear:(BOOL)animated
{
[self performSelectorOnMainThread:@selector(startTimer) withObject:nil waitUntilDone:NO] ;
}
iOSアプリ開発で Facebook SDK を使ってログイン処理を書いていたら
App not setup: The developers of this app have not set up this app properly for Facebook Login.
というエラーでログインできなかった。
ログイン処理のコードは別のアプリでも使っているものなので問題なさそう。
Facebook developer ページのアプリの設定で
Status & Review の Do you want to make this app and all its live features available to the general public?
の問いを YES にするとログインできるようになりました。
public にしなくても本人のアカウントではログインできるので、他の人がテストするまで気づきませんでした。
iOS 5.x でアプリ起動時に
dyld_fatal_error
dyldbootstrap::start .....
エラーとなる。
悩んだ結果、追加したFrameworkがiOS5に無いためのようだ。
Social
AdSupport
Accounts
の各フレームワークをOptional にしたら無事起動しました。
UITableView の セルの背景色を指定しようと思い、単純に
[someCell setBackgroundColor:[UIColor redColor]] ;
のようなことをしてみたが、一向に背景色が変わる気配が無い。。
調べてみたところ、UITableViewCell の contentView に対して setBackgroundColor を発行しないといけないことが判明。
[someCell.contentView setBackgroundColor:[UIColor redColor]] ;
で無事に背景色が設定されました。
これ、何度かやっているので備忘録。
NSMutableArray に addObject でオブジェクトを追加した後、objectAt でオブジェクトを取得すると nil が返ってくる。
addObject する前に NSLog でログを出しても、ちゃんと出力されるので、追加するオブジェクトは nil ではない。
でも、objectAt で nil が返ってくる。
原因は alloc していませんでした。。。
addObject する前に [[NSMutableArray alloc] init] が必要でした。基本ですね。。
NSMutableArray 自身は nil の場合でも addObject がランタイムエラーにならないので気づきにくい。
意外と軽くはまります。
このバグは忘れたころにやってきます。
iOSアプリ開発時にはARCという機能をONにしている。
ARCはインスタンスを管理して、不要になったら自動的に解放してくれる便利な機能です。
これを使うことによって release などの明示的な解放処理の記述を書かなくてもよくなります。逆に書くとエラーになります。
しかし、開発をしていると、他のプロジェクトのソースを参考にしたり取り入れたりすることも多いので、その際はこのARCが問題になります。
参考にするソースがARCに非対応の場合、release などの記述がコード中にあるので、そのまま取り込むと
not available in automatic reference counting mode
というようなエラーが発生します。
このエラーを無くすために ARC 非対応の記述を一つ一つ直すのは大変なので、以下の手順で特定のソースだけ ARC をOFFにしてコンパイルします。
[Build Phases] - [Compile Sources] で該当のソースファイルを選択してEnter
表示されたエディットボックスに -fno-objc-arc を記述してEnter
この設定で、指定されたファイルは ARC OFF でコンパイルされます。