iOS CoreData を使用しながら、デバッグをする際の注意点

CoreData を使って見ているのですが、なかなか便利ですね。特に、Updateの際に、NSManagedObjectのオブジェクトのデータを書き換えるだけで、データが反映されるのはいいです。ときどき、動作がおかしいと思うことがあったので、注意点を備忘として記載しておきます。

  1. NSManagedObjectContextのセーブをする必要がある
  2. 今回のプロジェクトでは、共用のmanagedObjectを作成して、それを、

    • アプリがバックグラウンドに映る際
    • アプリが終了する際

    に保存するようにしています。これをしないと、ローカルでは変更されているように見えても、次回アプリを起動した時に、データが保存されなくなってしまいます。
    こんな感じです。

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
    [self saveContext];
    }

    - (void)applicationWillTerminate:(UIApplication *)application
    {
    // Saves changes in the application's managed object context before the application terminates.
    [self saveContext];
    }

    - (void)saveContext
    {
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil)
    {
    if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
    {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
    }
    }
    }

  3. デバッグ中に保存されない場合は、正しくデータの保存処理が呼ばれて呼ばれていない可能性がある
  4. これで少し迷ったのですが、デバッグ中に、Xcodeのストップボタンを押した時には、上の、

    - (void)applicationWillTerminate:(UIApplication *)application
    - (void)applicationDidEnterBackground:(UIApplication *)application

    が呼ばれないので、データが保存されません。その場合は、直前の変更が無かったことになってしまいます。

分かっていれば難しくないのですが、忘れていると、”保存されたデータが無くなった”を感じてしまうことがあったので、備忘で記録しておきます。

iOS 開発中に、アプリ内購入テストサーバに接続出来なくなった原因

本日12/29から、無事にiTunesConnectサイトのホリデー休暇も終わったのですが、こーでぃんぐしていると、
Payment Transaction END Failed: … Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store"
というエラーが出て、アプリ内購入に接続出来ませんでした。まだホリデーで繋がらないのかなと思ったのですが、よくよく調べてみると,原因は、

provisioning プロファイルが、正しいものを使っていなかった。

という、至極単純な理由でした。正しいプロファイルを選択して、アプリを削除して,クリーンインストールすると問題なく正しく使用出来ました。

サクッと Cocos2D ゲームを作ろう!(1)SpriteHelperでのテクスチャー処理

みんなで玉入れ!運動会 App
カテゴリ: ゲーム
価格: 無料

みんなで玉入れ!運動会 iPad アプリが、無事に1.0.1バージョンに更新されました。バグ修正、また、メニューにサウンドを追加しました。このアプリは、フレームワークにHome – Kobold2D™ – Kobold2D ,物理エンジンにBox2D | A 2D Physics Engine for Games を使用しています。

そして、レベルエディタとして、LevelHelper、スプライト作成ソフトとして、SpriteHelperを使用しました。これらのツールによって、多くの作業をグラフィカルに行うことが出来るので、プログラマーの作業を大幅に軽減することが出来ます。ちなみに、玉入れアプリは、基本の玉入れの動作はLevelHelper、SpriteHelperの勉強をかねて、5時間ほどで作ることが出来ました。

(そのあと、メニュー、デザイナとの共同作業、スコア表示、ゲームセンター、アプリ内購入などで、あと数日掛かっているんですが…)

LevelHelper App
カテゴリ: 開発ツール
価格: ¥1,600

SpriteHelper App
カテゴリ: 開発ツール
価格: ¥1,100

SpriteHelperには、お試し版の SpriteHelper FREEもありますが、機能制限があるので、実際にゲームを作るときは、通常版が必要かもしれません。
SpriteHelperFree App
カテゴリ: 開発ツール
価格: 無料

それでは、SpriteHelperから始めましょう。
“サクッと Cocos2D ゲームを作ろう!(1)SpriteHelperでのテクスチャー処理” の続きを読む