日々精進

新しく学んだことを書き留めていきます

iOS

Objcの定数

.hに FOUNDATION_EXPORT NSString *const MyFirstConstant; FOUNDATION_EXPORT int const MyFirstConstant = 1.mに NSString *const MyFirstConstant = @"FirstConstant";のように書く。defineは使わないようにする。 参考:cocoa - Constants in Objective …

NSUserDefaultsとsqliteのどちらにデータを保存すべきか

NSUserDefaultsは学習コストが低いのがメリットだけど、それ以外はsqliteの方が勝っているよとのことらしい。 参考:iphone - What are the limitations of NSUserDefaults? - Stack Overflow

簡単に言語設定を変更する方法

詳細は↓。これテストする時便利だった。 iOSアプリのローカライズの動作チェックとかが簡単になるかもしれないやり方 - iOS プログラミングメモ - iPhoneアプリ開発グループ schemeのArguments Passed On Launchに以下を追加すればよい。 -AppleLanguages "(…

HTTP通信時のCFDataのメモリリーク

socket.io-objc v0.3.3でxhr-polling通信を行うとメモリリークが発生する。 CFDataが解放されずどんどんたまる。 これはNSURLCacheがCFDataをキャッシュしていることが原因。 下記を通信が終わったタイミングで実行するとCFDataが解放される。 NSURLCache *s…

CoreDataで保存したデータを全部消す

MagicalRecordでできないかなと思ったけど、できないらしい。sqliteのファイルを削除すると全部消せる。 - (void)clearDb { NSString *sqliteFileName = [NSString stringWithFormat:@"%@%@", dbFileName, @".sqlite"]; NSURL *dbFileUrl = [NSPersistentSto…

NSDictionaryを別クラスに変換する方法。

iOS

これ通信で受け取ったJsonをモデルに変換するのに使えそう。 参考:Objective-C - NSDictionary⇔自作オブジェクトに変換する方法 - Qiita

変わったコードブロックの書き方

iOS

こんな書き方が出来るんだね。興味深い。 cocoa-dom - New thing I do in code

角丸のベジェパス

iOS

Apple公式サイトに角丸のベジェパスを生成するコードがあったので使わせてもらいました。 Dicey: NSBezierPath-RoundedRect.h

pushViewControllerのアニメーションを変更する方法

iOS

以下の手順でできる。 ・Push先のViewをaddSubViewする ・アニメーションを使ってPush先のViewを表示する ・ViewControllerをPushする 参考:UINavigationControllerのアニメーションをカスタマイズする方法 | CAPH TECH

自己証明書を使って接続する方法

iOS

下記参照。 RedminePM - 【よくあるご質問】 Q 自己証明書(オレオレ証明書)で接続したい A 可能です。... | Facebook

Objective-Cのsocket.ioクライアントライブラリ

iOS

socket.IO-objcを使ってみたけどなかなか良さそう。 CocoaPodsで問題なくインストールできた。 pkyeck/socket.IO-objc · GitHub

variable not available

iOS

デバッガで変数の値を見ようとするとvariable not availableとなる原因は、ビルド設定でバイナリの最適化を行っていること。 最適化レベルを下げると値を見れるようになる。 参考:objective c - lldb error: variable not available - Stack Overflow

指定秒後に引数付きでメソッドを呼び出す

NSInvocationを使うと引数も渡せる。 setArgumentで引数を渡す時になぜかメソッドの実引数を渡すとエラーになった。 ローカル変数に代入し直すと直った。なぜ。。 - (void)requestImageWithUrl:(NSURL *)url callback:(void (^)(NSImage *image))callback { …

iOS6でアプリを上書きインストールしようとするとエラー

iOS

・現象 バージョンの違うアプリをiPhoneに上書きインストールしようとすると、以下のエラーが出る。 could not change executable permissions on the application iOS5では上記エラーがでないが、iOS6では出る。 上書きインストールでなく、新規インストー…

呼び出し禁止メソッドを呼ぼうとするとコンパイルエラーにする

サブクラスでイニシャライザを実装する場合、 親クラスのイニシャライザを使用禁止にしたいことが多い。 普通は使用禁止にするメソッドを呼ぶと例外を出すようにすることが多いと思うが、以下のようにするとコンパイルエラーにすることができる。 - (instanc…

画面回転ロックが設定されていても強制的に画面を回転可能にする方法

iOS

iOSが認識している端末の向きを縦に固定し、加速度センサを使って端末の向きを判定しAffintransformで画面を回転させる。 参考:iphone - iOS device orientation disregarding orientation lock - Stack Overflow iphone - Rotating Accelerometer output t…

clang: error: unable to execute command: posix_spawn failed: Resource temporarily unavailableエラー

XCodeを再起動したら直った。なんだこりゃ。。 iphone - Xcode not compiling any project? 'clang failed with exit code 255' - Stack Overflow

複数のSetterから一つのプロパティに値をセットできる場合の注意点

以下のように複数のsetterからvalueプロパティに値を代入できる場合。 @interface PropertyViewModel : NSObject @property(nonatomic, strong) NSString *key; @property(nonatomic, strong) NSString *value; - (NSInteger)integerValue; - (void)setInteg…

localTimeZone, systemTimeZone, defaultTimeZoneの違い

iOS

defaultTimeZone:各アプリ毎に違う値を設定できる。 systemTimeZone:システム環境設定で設定しているTimeZone localTimeZone:defaultTimeZoneがValueObjectを返す(値が変わらない)のに対してlocalTimeZoneはdefaultTimeZoneへの参照を返す。defaultTime…

Reactive Cocoaについての記事

Qiitaにあったのでメモ。RACは情報が少ないので助かる。 Objective-C - ReactiveCocoaに出てくる用語の整理 - Qiita

透明なテーブルヘッダとセルが重なったときにセルを非表示にする方法

iOS

↓のサンプルコードまるコピペでいけた。素晴らしい。 iphone - How to mask UITableViewCells underneath a UITableView Transparent Header - Stack Overflow

SparkInspectorをインストールしたらエラー

iOS

SparkInspectorをインストールしたら以下のビルドエラーが出るようになった。 'SparkInspector/SparkInspector.h' file not found with <angled> include; use "quotes" insteadこれはXcodeを再起動したら直った。謎。。</angled>

GHUnit導入手順メモ

iOS

私的メモです。 ○GHUnit導入手順 参考サイト:http://morizyun.github.io/blog/ghunit-xcode-45-ios6-tdd-unit-test/ ・CocoaPod経由でインストール ・GHUnit用ターゲットの追加 ・不要なファイルを削除 ・main.m修正 ・テスト対象のファイルをGHUnit用ター…

Podfileで一つもインストールするライブラリが指定されていない場合、以下のビルドエラーが出る。 ld: library not found for -lPods何でもいいから一つ以上のライブラリをCocoaPod経由でインストールすると直る

magical recordのオプション設定時の注意

MR_ENABLE_ACTIVE_RECORD_LOGGINGなどのpreprocessor macroを設定することで、ログを出力しないなどの設定が出来るが、 アプリ側の.pchファイルに定義しても設定が反映されない。 マクロはCoreData + MagicalRecord.hがインポートされる前に定義されなければ…

iOSアプリでよくあるエラー

iOS

↓のようにLdから始まるエラーメッセージが出たときはFrameworkが足りないことが原因のことが多い。Ld /Users/Max/Library/Developer/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Products/Debug-iphonesimulator/ImpromptuTimer.a…

Reactive Cocoaのパフォーマンス

RACBindでプロパティをBindするのは結構CPUTimeを食う。 以下の条件で実験したらBind処理だけで10%ぐらいCPUTimeを消費していた。 ・2.7GHz Core i5 ・32オブジェクト ・各オブジェクトのプロパティ6つをBind ・約1秒おきに新しいオブジェクトが出来てBindさ…

Spark Inspectorがすごい

iOS

iOSアプリのレイアウトを作る時に超活躍しそう。これはすごい。Buy Now! Spark Inspector Store

ボタンが押せない時に確認すること

ボタンが押せない、ドラッグ出来るはずの要素がドラッグできないといった時は以下を確認すること。 ・ボタンがSuperViewの外に出ていないか ・ボタンの上に他のViewが重なっていないか ・User Interaction EnabledがNOになっていないか

Reactive CocoaでViewを更新する時はthrottle:0する

Reactive CocoaでViewとViewModelをBindすると、ViewModelのプロパティを変更する度にViewの更新ロジックが実行されるのでパフォーマンスに問題が出やすい。 特にTableViewは以下のようにViewModelの配列のどこかを変更されたら都度reloadとしていると一回の…