2013/07/05

ほぼ初めてのiOS開発

後藤です。

ケイフィールドで開発を始めている新サービスについて、私も7月からiOSアプリの開発に現在着手しています。
私は入社の3年前ごろにケイフィールドのインターンシップに参加しており、その際にObjective-Cを経験していて初めてではないはずなのですが、メソッドの書き方とか、プロパティの定義の仕方とか、覚えていないものですね。 しかも、当時はまだストーリーボードがなかったので、色々とやり方がわからず まるっきり初心者のように、毎日エラーにぶつかっては調べて先輩方に聞いて…を繰り返しています。

今回は開発中に出遭ったエラーについて書こうと思います。
// 発生原因等について具体的に分かっていない部分もありますが、ご容赦ください。もし分かるものがあれば、ご教授いただけますと幸いです。

■ TableViewを利用していてcellForRowAtIndexPathメソッドでcellがnilのまま何も入らずエラーが出る

今のバージョンだと、cellがnilの場合は自動的に何か入るとのことですが、何らかの原因によりそれが入らずエラーになってしまっているのではないかという話になりました。
その時の対策としては、UITableViewControllerのサブクラスでObjective-Cファイルを作成した際に自動的に実装ファイルに追加されているcellForRowAtIndexPathメソッドの中へ、以下のif文を追加するとうまくいきました。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if ( cell == nil ) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    return cell;
}
ただ、今同じ状況を再現しようとしたらうまく動いてしまってできませんでした。後述するのですが一度iOSシュミレータやらプロジェクトのファイルやらを全部削除して実行してみたら様々な不具合が直ったので、これもそのせいだったのかもしれません。
また、最初にcellの定義を行なっている部分で、引数にindexPathが入ったままだとうまくいかないこともあったのですが、それも今はうまく動いてしまい原因がわかりませんでした。


■ ちゃんとセグエを作ってるのに ないというエラーが出る

ちゃんとセグエはViewからViewにつないだ、セグエのIdentifierもちゃんと設定している、コードの方もコピペしてIdentifierは一字一句間違いない、のに どうしてもずっとNSInvalidArgumentExceptionが出て消えませんでした。Receiver has no segue with identifierといっていますが、ちゃんとあるんですけど…と思いながらそこそこ長い時間戦いました。
このreasonの部分を検索しても英語のしか出てこないし(もちろん頑張って読みましたが、どれも具体的な解決策は出ていませんでした)、先輩たちにもお聞きしたものの理由は見つからず、どうしたものかと思っていたのですが…。

少し前にも同じことを行っていたのでダメ元で、とiOSシュミレータを初期化しプロジェクトのファイルも一旦削除してからリポジトリのものを戻してきたら、なぜかちゃんと動くようになりました。
もともと、今井さんのところではちゃんと表示されているのに私のところではセルのラベルが表示されないというような不具合もあったのですが、それも全部解消しました。何が原因だったのかは未だにわかりませんが、もっと早く試していれば…と思いました。

追記: 同じような(ストーリーボードもコードもちゃんとなっているのになぜか反映されない)事象が再び起こりましたが、その際はiOSシュミレータのアプリデータを削除することですぐに解決しました。なぜかちゃんとビルドしたものが反映されないことがあるみたいですね。。


すぐ解決した簡単なエラーを除けばこんな感じです。

今はiOSもかなりメジャーになり日本語の解説サイトさんなども増えてきましたが、それでも「開発者ならこれくらい分かって当然」なのか、「一々誰かのために書くのは面倒だから」なのか、エラーと対策などを書いてくださってるサイトってまだ少ないですよね。(もちろん、英語でもスラスラ理解できるようにはなりたいんですが…)
そういった、日本語の情報を求めている人に有益なことをかけるように、なりたいものです。今回のは原因とかが分からず役に立ちそうもないですが、まだまだこれからということで。。

以上、後藤でした。



1 件のコメント :