弁理士短答試験過去問題記録ノート」タグアーカイブ

iOS7 iPhoneアプリ(4作目)申請からリリース状況のまとめ 2013年9月、弁理士短答試験過去問題記録ノート

iOS7 iPhoneアプリ(4作目)申請からリリース状況のまとめ 2013年9月、弁理士短答試験過去問題記録ノート 

画像

SQLiteとCoreDataを使用しました。iOS6,7、iPhone,iPad対応です。
iOS7が公開されるのを待ってのリリースでした。9月10日ごろには完成してましたが、iOS7での確認を済ませてからの申請と考え20日以降の申請となりました。
 OS6と7では、上のバーの表示と座標の問題が発生しました。OS6ではバーの下の部分が座標0,0になるのに対して、OS7では、バーを含めたディスプレイ画面の左上が座標0,0になります。つまり、座標の扱いががらっと変わってしまいました。なぜこのような混乱を招くような仕様にしたのか疑問でなりません。OS7の仕様は間違った仕様のように思えます。いずれ不評により、OS6に逆戻りするのではないかと思っています。元に戻されても今になっては困りますけど。
 

  1. ・経過
     9月22日 申請
     9月29日 認可
     9月30日 リリース(予定通り)
     
    弁理士短答試験の受験生向け学習用アイフォンアプリ(無料)を公開しました。
    アプリ名は弁理士短答試験過去問題記録ノートといいます。特許法、実用新案法、意匠法、商標法の条文を搭載しています。
    以下より無料でダウンロードできます。
    無料ダウンロード

    ・ソフトの説明
     弁理士短答試験の過去問題を学習する無料の勉強アプリです(H25年に出題された問題を利用してます)。出題さらた60問の中から利用者が1問を選び、問題を解いていきます。
     解いた問題で正解した履歴を記録する機能を備えており、認識が足りない問題を把握することができます。正解するまで問題を解いたり、正解回数が同じになるまで全問題を解いたりするなど、ご利用できます。
     
    さらに、特許、実用新案、意匠、商標の条文データを搭載していますので、問題を解きながらでも条文を表示できます。(著作権、不正競争防止法他の条文については今後のバージョンアップで対応予定)

     この無料アプリをダウンロードすれば、重くてかさばる紙媒体の条文集を持ち歩くときの不便性が解消されます。スマートフォンアプリにダウンロードするだけ。
     

  2. ・機能紹介

     閲覧したい条文は、使いやすいダイヤルピッカーを採用し、20条毎にジャンプして見たい条文を素早く表示します。
     弁理士短答試験の過去問題(現在は平成25年度の問題を使用)の一覧リストから1問を選択し学習していきます。正解の履歴が残るので、勉強不足の問題を把握することができます。(解説については、書籍、参考書をご覧ください。)
     このアプリは特許法、実用新案法、意匠法、商標法の4つの条文データを搭載しているので、紙媒体の法文集を持ち歩く必要はありません。問題を解きながら、画面を切り換えて必要な条文を表示することができます。

     

  3. ・ダウンロード
    以下より無料でダウンロードできます。
    無料ダウンロード

    help1

    help2

    help3

    その他のアプリ(無料ゲーム)の情報はこちらに記載しています。cocos2d for iPhoneを利用しています。
    無料アイフォンアプリ、ひよこレスキューの紹介
    無料アイフォンアプリ、フルーツ打の紹介
    無料アイフォンアプリ、どんぐり合戦の紹介

★アイフォンアプリの開発XCode今日のエラーの対処、Navigationナビゲーションコントローラーのエラー、 unrecognized selector sent to instance というエラーが多くて対処中、CoreDataによるデータベースはプロジェクトでテンプレートを指定して作成する

アイフォンアプリの開発で今日のエラー、ナビゲーションコントローラーのエラー、 unrecognized selector sent to instance というエラーが多くて対処中

iPhoneアプリ開発中はさまざまなエラーが発生します。できるだけ、その都度、どうやったのかをメモしています。
そうすることで、すぐにエラーに対処でき、悩まずに済みますし、開発期間を短縮できるし、ストレスも小さくできます。

記憶が薄れそうなので、CoreDataコアデータ、データベースについて記載すると、コアデータを使用したアプリは、プロジェクトで先にテンプレートを指定したほうが開発が楽になります。他のテンプレートを指定したあとで、CoreDataの記載をするとエラーが多発してしまい時間がかかり、結局、コアデータのテンプレートを使用して開発しました。(2013年12月10日追記)

(1)NSMutableArrayの配列が正常に取得できない、範囲外の配列を取得しようとした

プロパティでstrongではなく、weakにしていた。
weakをstrongにして、配列のオブジェクトの値を正常に取得できました。

・NSMutableArrayのエラー、初期化を忘れているとコンパイルエラーがなくても、間違っている。初期化忘れがないかをチェックしましょう。
[[NSMutableArray alloc]init];

(2)intをNSNumberに変換したい

int n=10;
NSNumber *num=[NSNumber numberWithInt:n];

NSNumberをintとして扱うときは
n=[num intValue];
とします。

(3)ナビゲーションコントローラーのエラー

‘NSInvalidArgumentException’, reason: ‘-[ResultViewController viewControllers]: unrecognized selector sent to instance 0x11a5e950’

ナビゲーションコントローラーがないのに、ナビゲーションコントーラー用のコードを書いていました。
ナビ−ゲーションコントローラーがあるときの値を渡すとき

			UINavigationController *navCon=segue.destinationViewController;
            ResultViewController *rv=[navCon.viewControllers objectAtIndex:0];
            rv.youSelectNumber=[NSNumber numberWithInt:iselectAnswer];


            ResultViewController *rv=segue.destinationViewController;
             rv.youSelectNumber=[NSNumber numberWithInt:iselectAnswer];

ナビゲーションコントローラーがないときはシンプルです。

(4)admobが表示されない[GADObjectPrivate changeState:]: unrecognized selector sent to instance

というエラーは、ビルドセッティングを入れれよいだけでした。
以前作業したときはあったような気がしましたが、もしかすると、X-CODEのバージョンアップで解除されてしまった?

BuildSetting->Linking->Other Linker Flags
-ObjC
をRelease and Debugに入れました。
とりあえず、OKですが、
実はテーブルビューでスクロールをすると広告がセル一緒に移動してしまうのです。
ということはテーブルビューではAdmob広告は使えないか、他のテーブルで設定しなければなりません。

(5)Core Data、エンティティエラー、CoreDataによるデータベースはプロジェクトで指定して作成する

reason: ‘+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name

シングルビューでプロジェクトを作成し、後で、coreDataを追加したものです。
エンティティネームが間違っているかと思いましたが、正しい。
後入れ、CoreDataは結構面倒ですね。だからみんなさきに指定して作るんですね。
とりあえず、さきにEmptyプロジェクトにして作り直してみます。

>未解決ですが、解決としては、Emptyプロジェクトにして作り直したほうが早い

(5-2)再現性あり。

Emptyで作り直して、問題なかったのですが、また再現しました。
*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’,
reason: ‘+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name

まず、アプリを削除して、クリーンを実行しました。
その後、次の5−3のエラーが発生

(5−3)

reason: ‘*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array’
データをリセットして、初期状態になったので、
配列数が0になったと思います。
配列数が0のときに、配列の値を取得しないようにしました。
またエラーが発生したので、よくみたら
AppDelegateしたプロパティを
self.appとしました。
グローバル変数としたものを
@property(strong,nonatomic)NSNumber *nowNumber;//NSInteger
をweakにしたら、エラーが表示されず。
@property(weak,nonatomic)NSNumber *nowNumber;//NSInteger
しかし、エラーにならずとも、値がリセットされていました。値なしです。
そこで、retainにしてみました。
するとOKでした。
どうやら、AppDelegateのグローバル変数はretainが良さそうです。

そのほか、managedObjectContextが作成されていないみたいだったので、AppDelegate.h,mに設定しました。しかし、これでもだめ。
やはり、AppDelegateしたプロパティを
self.appとしました。OKです。

(6) nil エラー

reason: ‘Cannot create an NSPersistentStoreCoordinator with a nil model’

現在のビュークラスから次のビュークラスへ移動のときに、次のビュークラスでエラーがあって
呼び込めていないことがありました。そのため、次のクラスの怪しい箇所をコメントにしました。

(7)reason: ‘Pushing a navigation controller is not supported’

pushがだめならとmodalに変更しました。

なお、このnot supportedの場合、ナビコントローラーを交互に入れていたので(必ず一組で作成)、その1組のうちのナビコントローラーを削除して、組み直すとpushでも可能になります。
ここら辺がやってみないとわからないトライアンドエラーです。

(7−2)

Property implementation must have its declaration in interface ‘ResultViewController’
.mで、@synthesizeのところで改行を入れたから、OKでした。なぜ?

(8)Core Dataエラー

Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 “The operation couldn’t be completed. (Cocoa error 134100.)

新しく、CoreDataにエンティティを追加したり、アトリビュートを追加したときに実行するとエラーが起きます。
1.クリーンを実行して
2.この場合は、シミュレータのアプリを削除すればよいみたいです。
なお登録したデータが消えるかもしれないので、すでに登録して必要なデータは、保持した方がよいでしょう。テスト用でも面倒だったりするので。

(9)タブバーでのワーニングログ、

動作について今のところ支障がない。
Unknown class AAAViewCotroller in Interface Builder file.
タブバーを使用して、画面を切り替えるとログが表示、実行に問題はないけど、ちょっとログがでてしまうのが気になるところ。
>未解決、重要性が低い

(9)admobエラー、リンカーエラー

reason: ‘-[GADObjectPrivate changeState:]:
>X-CODEの環境設定で、Other Linker Flagsに -ObjCを追加

(10)

reason: ‘Unacceptable type of value for attribute: property = “number”; desired type = NSNumber; given type = __NSCFString; value = mas**.’

>未解決

(11)map の検索入力で半角英を入力したときにエラー

-[MapViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xac6d150
*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[MapViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xac6d150’

>- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
を追加しました。これは、サーチした後にテーブルビューが表示されるものです。
書籍には記載されていないもので、記載ミスでしょうか。

(12)画面遷移でのエラー

-[NSURLResponse intValue]: unrecognized selector sent to instance 0xac65570
*** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[NSURLResponse intValue]: unrecognized selector sent to instance 0xac65570’

ボタンをタップして次の画面に移動しないときがあって、必ず発生するエラーではない。3回に1回程度発生するという変なエラー。
NSURLResponse intValueを設定した覚えはない。ということは、それを使ってるメソッドか何かがどこかにあって、それが使っていると言うことですかね?

このように、必ず発生しないときは、発生手順をメモしながら原因を究明していきます。
環境は、ストーリーボード、coreDataを使用している。

>プロパティ変数のretainで解決しました。weakにして、retainでエラーがなくなりました。(5−3)での記載が詳細になります。

(13)NSDateはnilで判定

NSDate関連のエラーで、NSDateがnilでした。アウトプットはnullとでますが、
NSDate *date;
if(date==nil)
で判定します。

iPad 、アイフォンのストーリボードとiPadのストーリーボードの共存

アイフォンとiPadで同じパーツを使用するときで、同じクラスを使用するとき、ヘッダーファイルのプロパティをiPadのストーリーボードのパーツに紐付けします。
これだけで良いのです。
新しく、iPadのストーリーボードからヘッダーファイルへ紐付けする必要はありません。
つまり、すでに既存のヘッダーファイルのプロパティを利用できるのです。
これは便利です。アイフォンアプリとiPadアプリの2つのアプリを作成時間は意外にも時間がかからないのかもしれません。

(1)reason: ‘-[__NSCFString substringWithRange:]: Range or index out of bounds’

範囲外の値を入力していたので、範囲を小さくしました。

(2)reason:‘[ setValue:forUndefinedKey:]: this class is not key value coding-compliant

reason: ‘[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key imageViewSmall_iPad.’

アイフォンのストーリーボードからiPadのストーリーボードにコピペして、それを共通のビュークラスに紐付けしました。
そして、この紐付けが不要なのに、そのままにしていました。
shows connections inspectorで、びっくりマークになっている箇所を削除しましょう。
アイフォンと同じパーツを使うのであれば、ヘッダーファイルからストーリーボードのiPadのパーツへ紐づければ良いのです。ヘッダーファイルの該当するプロパティの左にある二重丸からiPadのストーリーボードのパーツへドラッグします。
この場合は、ヘッダーファイルからストーリーボードへつなぎます。いつものストーリーボードからヘッダーファイルへの向きと異なります。
たったこれだけです。iPadも意外と楽ちんです。

開発したアプリ、弁理士短答試験過去問題記録ノートの紹介

アプリ紹介リンク

このようにして開発したアプリが弁理士短答試験過去問題記録ノートです。
iOS7 iPhoneアプリ(4作目)申請からリリース状況のまとめ 2013年9月、弁理士短答試験過去問題記録ノート
アドモブの広告をつけています。

他のフレームワークについて

関連リンク

Unityでの開発状況2014年Unity4.5.5