日々精進

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

2013-03-01から1ヶ月間の記事一覧

CoreDataでDBに保存しないオブジェクト(Transienty Entity)を作る方法

・DBに保存したくないオブジェクト用のコンテキストを作り、それ経由でオブジェクトを作ったり、データをDBから取得したりする。 CoreDataでは異なるコンテキストから取得したオブジェクトへの参照を持つことができないので困ることがある。 例えばPerson→Fa…

カスタムviewやwindowクラスのインスタンスをXIBから作る

mac

OSXアプリの場合、以下のようにすればXIBからインスタンスが作れる。 - (id)init { NSWindowController *windowController = [[NSWindowController alloc] initWithWindowNibName:@"RateListWindow"]; self = windowController.window; if (self) { ・・・ }…

NSWindowのdelegateメソッドが呼ばれない

mac

windowDidResignKeyが呼ばれなくて困ったという話。 NSWindowのサブクラスで↓のようにself.delegate = selfとしてNSWindowDelegateのメソッドを自分で処理しようとしたがdelegateメソッドが全然呼ばれない。 - (id)initWithContentRect:(NSRect)contentRect …

cannot find protocol declaration forというビルドエラーが出る

mac

@interfaceにProtocolをつけたらcannot find protocol declaration forというビルドエラーが出た。 ちゃんとプロトコルを宣言しているヘッダファイルはインポートしてるのに。。 実はヘッダの循環参照が生じているとこのエラーが出るらしい。メッセージわか…

ウィンドウを最前面に持ってくる方法

mac

[NSApp activateIgnoringOtherApps:YES];参考:cocoa - How to bring NSWindow to front and to the current Space? - Stack Overflow

NSWindowControllerまたはそのサブクラスをweak参照にしようとすると、cannot form weak reference to instanceエラーになる

mac

weak参照にすることを禁止する方法があるらしく、禁止されているクラスのオブジェクトにWeak参照したら実行時エラーが出る。知らなかった。。 NSWindowControllerはWeak参照が禁止されているので、Weakの代わりにunsafe_unretainedを使う。 参考:http://tak…

mogeneratorでEntityに対応するクラスが生成されない

mac

エンティティのプロパティのClassにクラス名が入力されていないと クラスが生成されない。

mogeneratorをOS X 10.7で実行するとsegmentation faultが出る

mac

ソース一式を落としてきてXCodeでビルドしてできたバイナリを使えば出なくなる。 参考:Seg fault while processing model · Issue #121 · rentzsch/mogenerator · GitHub

objective-cの便利なライブラリ

viewのframeの操作などを簡単にしてくれるライブラリ。 これ便利そうだけどMacでは使えないっぽかった。。iOSの開発で使ってみたい。 nicklockwood/ViewUtils · GitHub

NSTableViewの行を選択不可にする

mac

cocoa - NSTableView - Disable Row Selection - Stack Overflow

NSTableViewで行をドラッグアンドドロップする

mac

この記事のコードをコピって多少修正したらできた。 objective c - Implementing drag and drop in NSTableView - Stack Overflow ポイントは以下。 ・ドラッグアンドドロップはクリップボード経由でデータを受け渡しする ・データタイプをregisterForDragge…

NSPreferencePaneを使おうとしたらコンパイルエラー

mac

NSPreferencePaneを継承したクラスを作って環境設定画面を持ったアプリを作ろうとしたら、以下のコンパイルエラーが出た。 _OBJC_CLASS_$_NSPreferencePane", referenced from _OBJC_METACLASS_$_PreferencePane in PreferencePane.oこれはNSPreferencePane…

コンパイルエラー

mac

以下のようなコンパイルエラーが出た。 warning: directory not found for option '-F/Applications/Xcode4.6.app/Contents/Developer/Library/Frameworks'これはFramework Search PathなどのSearch Pathが存在しないことが原因。存在しないパスを削除すれば…

mogeneratorでCoreDataのモデルクラスを自動生成する

mac

ARCを使っている場合は--template-var arc=trueを付けないといけないので注意。 mogenerator -m Sample/Sample.xcdatamodeld/Sample.xcdatamodel/ -O Sample/Models/ --template-var arc=true 参考:MagicalRecord 2.0がリリース | Technology-Gym

fetchedProperty

mac

CoreDataのデータモデルエディタにfetchedPropertyという項目がある。 これはここで検索条件を設定してfindメソッドを作れるよ、というものっぽい。 http://blog.natsuapps.com/2010/02/core-data-12.html

NSManagedObjectのプロパティにNSIntegerを使うとBadAccess

mac

NSManagedObjectのプロパティはintを保持する場合はNSIntegerでなくNSNumber型にしないといけない。 でないとプロパティに値を代入した時にBadAccessになる。

CoreDataのデータブラウザ

mac

Core Data Editorというソフトがよさげな感じ。有料だけど、ちょっと試してみたい。OSX10.8以上でないと動かないのが痛いが。。 Christian Kienle

CoreDataを保存しているファイルのありか

mac

macアプリからCoreDataのデータを保存した場合、以下の場所にデータファイルが保存される。 ~/Library/Application Support/*YourAppName*/database.db iOSアプリの場合とちょっと違う。cocoa - OSX: Where to store SQLite file for application? - Stack O…

CoreDataでマスタデータをセットアップする方法

mac

CoreDataを使っていて、アプリインストール時にDBにマスタデータを保存したい場合、ベストプラクティスはCoreData経由でデータを保存するコードを書くことらしい。 CoreDataが生成するデータは色々依存関係があったりするので自分でSQLを実行したりして直接…

アニメーションでframeを変化させた場合、subviewのframeがおかしくなる

mac

subviewのautoresizingMaskでTopMarginを固定にしてるのにマージンがなぜか変化する。。ということがあった。 原因はframeのsizeを0近くから広げるアニメーションをしていたため、アニメーション中のsubviewのframeの計算結果が丸め誤差等の影響でおかしくな…

AppCodeとDashの連携

mac

AppCodeの機能でDashと連携してメソッドの使い方とかを検索出来る機能がある。 今まで使ってなかったけど、超便利で感動しました。ノータイムでDashに課金した。 いい点は以下。 ・公式ドキュメントをローカルで検索するので動作が超速い ・Google、StackOve…

Macアプリ作り始めました

mac

最近Macアプリを作り始めたけど、iOSアプリとの違いに戸惑い中。 とりあえずハマった点は以下。 ・NSViewがUIViewとだいぶ違う。機能が少ない。 ・backgroundColorを設定できない。これは独自クラスのdrawRectで塗りつぶしを実装してbackgroundColorを使える…

XIBからNSViewのサブクラスのインスタンスを作る

mac

以下のようにする。iOSの場合とちょっと違うので注意。 - (id)init { NSNib *nib = [[NSNib alloc] initWithNibNamed:@"View" bundle:nil]; NSArray *topLevelObjects; if ([nib instantiateNibWithOwner:self topLevelObjects:&topLevelObjects]) { for (NS…

コンパイル時にXIBファイルでエラーが出る

iOS

以下のエラーが出た。 The document "Example.xib" could not be opened. The operation couldn’t be completed. Two members of the document have the object ID 50. This may have happened through an external edit, such as an SCM merge operation.エ…

NSArrayのcontainsObject

iOS

containsObjectはNSArrayの要素のisEqualメソッドを使って同じオブジェクトかどうかを判定しているので、例えばNSNumberオブジェクトが要素の場合は正しく判定できない。具体的には以下のように想定と違う動作になる。 NSArray *ary = @[@1]; [ary containsO…

実行時にBAD_ACCESSが出るようになる

OSX

突然以下のエラーが出てアプリを起動できなくなった。 dyld: Library not loaded: @rpath/SenTestingKit.framework/Versions/A/SenTestingKit Referenced from: /Users//Library/Developer/Xcode/DerivedData/-dlkipdukwbgyedhizqyoycxnbqrf/Build/Products/…

CocoaPodでライブラリをインストールしようとしたらエラーが出た

iOS

pod installを実行すると以下のようなエラーが出た。 ### Report * What did you do? * What did you expect to happen? * What happened instead? ### Stack ``` CocoaPods : 0.17.2 Ruby : ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]…

PCからnexus7にファイルをコピーするとファイル名が無効かまたは長すぎますというエラーが出る

秀丸ファイラを使ってコピー使用とするとエラーになったが、 エクスプローラからは普通にコピーできた。なぜ。。

ビルドしたバイナリが対応しているアーキテクチャを調べる方法

iOS

以下のコマンドを実行すると調べられる。 xcrun -sdk iphoneos lipo -info Product/libJSONKit.a参考:http://blog.ishkawa.org/blog/2013/01/28/universal-static-library-2013/

文字コードと半角・全角の罠

iOS

よく半角記号・半角文字などと言うが、 文字コードによってある文字が1バイト文字かマルチバイト文字かが変わるので、仕様を「半角記号は入力可」のように決めると後でトラブルの元になる。 例えば、「\」はShiftJISでは1バイトだが、UTF8では2バイト。 半角…