アイフォンアプリ開発X-CoDE,今日のエラー、Range or index out of bounds、NSMakeRangeで範囲外を指定でエラー、フォント巨大化

X-code,今日のエラー、Range or index out of bounds

(1)tableVIewでスライドすると強制終了する、substringWithRange:]: Range or index out of bounds

reason: ‘-[__NSCFString substringWithRange:]: Range or index out of bounds’
iPhoneでOKだったので、iPadで実行したら、強制終了となった。
ステップ実行しても特に配列数を越えているようには思えない。
取り合えず、アプリを一旦削除して再度実行。

それでもエラーでした。

調べると
NSMakeRangeで範囲外を指定いることが原因。実は、アイフォンは文字数を少なく設定していて、文字数を超えることはありませんでした。iPadはアイフォンの倍の文字数を表示できるので、大きめにNSMakeRangeを設定していました。
そこで、NSString strでstr.lengtで文字列の長さをとって、比較して、指定した値よりも小さいときは、その文字列の長さをNSMakeRangeに指定するようにしました。
>改善内容:文字プロパティの文字数を把握し、その文字数にあわせてレンジ幅を設定しました。

(2)Admob,textViewのフォントが指定サイズよりも大きくなり、次の表示で元のサイズに戻る
[textView setFont:[UIFont systemFontOfSize:12]];

or
UIFont *myFont = [UIFont fontWithName:@”HiraKakuProN-W3″size:12];
[myLabel setFont:myFont];

実施内容
フォントサイズを固定した、だめ。
個別にフォント指定した、だめ。
>ここまでだめ。
>改善せず、
以下もだめ
1.systemフォントをヒラギノ角ゴシックにした
2.ローカライズを日本Japaneseに変更。
このとき、元のローカライズが英語だったため、ストーリーボードが日本語フォルダに移動させられて、実行エラーとなった。そこで、Build PhasesのCopy Bundle ResourcesにStoryboardファイルを追加。フォルダがJAフォルダ(不正確)に入っている

すると、5回目以降でもフォントサイズが倍加することがなくなりました。これでしばらく様子を見ます。

アイフォンは、ローカライズ英語のままで、テキストビューをヒラギノにした
iPadは、ローカライズ日本語で、テキストビューをヒラギノにした

これで、アイフォンもフォントサイズが倍化しなければ、フォントはヒラギノにすれば、テキストビューが倍加することはないということになります。ローカライズを日本語にしなくてもよいと判断できるでしょう。
その後、
やっぱり、フォントが倍化してしまいました。

もう一度見直してみます。

3.個別にNSAttributedStringに対してもフォントサイズを固定するようにしました。
>原因がわかりました。ADMOBが表示するテキストに反応して、フォントが大きくなっているようです。
つまり画像の広告の場合は、フォントが大きくなりませんが、ADMOBでテキストの媒体が表示されるとフォント大きくなりました。
ADMOBの表示順序を変えて、フォントが影響を受けないようにしました。
>でも、カラーを指定しないフォントは影響を受けてフォントが大きくなりました。そして、カラーを指定したフォントは影響を受けていません。
それで、カラーを指定することにしました。しかし、blackColorという指定でした。
RGBで指定してみます。
>色を与えてもだめです。

つぎは、フォントをsystemFontにしてみます。
>これもだめでした。

>いっそのこと、フォントサイズの指定を一部解除しました。
数カ所にフォントサイズはありますが、なんとこれでフォントサイズが巨大化することはなくなりました。
またしばらく様子をみることにします。
無理矢理、再設定してみることにしました。

-(void)viewWillAppear:(BOOL)animated{
    NSAttributedString *tmp=self.questionText.attributedText;
    NSMutableAttributedString *attrStr=[[NSMutableAttributedString alloc]initWithAttributedString:tmp];
    [attrStr addAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]} range:NSMakeRange(0, attrStr.length)];
    [self.questionText setFont:[UIFont systemFontOfSize:12]];//
    }

>まだフォントが大きくなってしまいます。頻度は10回に1回程度。
まだまだなにか改善が必要です。


【送料無料】カシオEXILIM Hi-ZOOM EX-H60(ブラック) [EXH60]
薄型でありながらホールド感に優れたコンパクトボディに、広角25mm・光学24倍ズームレンズと大画面3.0型モニター、CCDシフト方式の手ブレ補正機構を搭載。広大な風景や狭い室内、また、被写体に近づけない場所でも、広角・高倍率レンズを活かして幅広いシーンで撮影を楽しめる有効画素数1610万画素のデジタルカメラです。
手ブレ補正が進化しました。ハーフロック(シャッター半押し)中の手ブレ補正の継続動作により、従来機種『EX-H50』で生じていた小刻みなブレが抑制されるようになりました(継続動作:最大30秒)。また、動画記録時の手ブレ補正にも対応するようになりました。


WG-3 ホワイトブル-【税込】 ペンタックス デジタルカメラ「Optio WG-3」(ホワイトブルー)在庫あり
本体の気密性をさらに強化することで、水深14m(従来は水深12mまで)で連続2時間の水中使用に耐える高い防水性能(IPX8、JIS保護等級8相当に準拠)を実現しています。
さらに、2m(従来は1.5mまで)からの耐落下衝撃性能注1やホコリに強いIP6X(JIS保護等級6)相当の防塵性能、マイナス10℃でも動作が可能な耐寒構造
100kgf(重量キログラム)までの重さに耐える耐荷重構造などを備え、過酷なアウトドア環境下での使用に耐えるタフネスモデルに仕上がっています。
センサーシフト方式の“SR(Shake Reduction)”と電子式の両方を使用して、より効果的に手ぶれを軽減できる“デュアル手ぶれ補正”を搭載しています。


【送料無料】ソニー 7インチ デジタルフォトフレーム DPF-D720 WI ホワイトスワロフスキー
7型16:10クリアフォトWVGA液晶クリスタル&ホワイト
■動画再生対応(MotionJPEG/MP3)
■マルチカードスロット搭載
■内蔵メモリー2GB搭載
■液晶サイズ:7インチ
■液晶パネル総ドット数(有効エリア):1,152,000ドット(987,000ドット)
■アスペクト比:16:10


東芝 TOSHIBA SDHCカード 32GB Class10 SDカード 32GB クラス10 SDHC :【お一人様3点まで】 東…在庫あり
超高速タイプのSDメモリカード/SDHCメモリカードはデータ転送速度は最大で30MB/秒。SDスピードクラス最高のClass10です。データ転送速度が速いカードをお探しの方に。

関連記事

「スポンサーリンク」


ツイートツイート
カテゴリー: iPhoneアイフォンアプリ開発 タグ: , パーマリンク