AppleWalker

Walker Softwareのサポートページです。 Mac iPhoneなどApple系のことを書いていきたいと思います。 訪問してくれた、みなさんよろしくね。(^^)ニコ

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
04



応援しよう!
banner3.jpg
 
 
 
アクセス数
 
 
Twitter
 
 
 
 
 
 
Apple-Style Plus
 
 
ApplePeople
 
 
 
 
 
 
 
 
全記事表示リンク
 

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

UIActionSheetの開発Tips

[iPhone][Apple][SDK]

Cleaning_01.png
①タブバーの上からアクションシートがでてる

iInformationおかげさまでユーティリティ部門、最高で16位まで
いきました。また、ガンガンとおちていってます。
無料なんで、ためしてください。
さらに、バージョン1.2申請しました。
 ■ディスクスペースの表示
 ■iPhone の起動時間の表示
 ■CPUのロードアベレージの表示
 ■リロードボタンの削除による、データの自動更新
です。よろしくお願いします。(^^)

さてさて、①のスクリーンショットは申請中のiInformationPro
メモリークリーニングの画面です。(さりげなく宣伝を...)
アクションシートがタブバーの上からでてるのがわかるでしょうか?
本来は、下から出したのですがキャンセルボタンが反応しないの
です。
しょうがないので、タブバーの上からだすことにしました。

以下がソースコードです。

- (IBAction)standardModeCleaning:(id)sender {

 UIActionSheet *actionSheet = [[UIActionSheet alloc]
  initWithTitle:NSLocalizedString(@"ModeSelectAlart", @"")
   delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:
    @"Cleanig Start" otherButtonTitles:nil];

 actionSheet.actionSheetStyle = UIBarStyleBlackTranslucent;

 [actionSheet showFromToolbar:self.toolBar];

 [actionSheet release];
}

と書いてました。
たまたま、あるブログを拝見してたら、偶然Tipsが!
(ただ、そのブログを覚えてません。書かれた方
 ありがとうございました。うまくいきました。)

Cleaning_02.png
②一番下から、アクションシートがでてる

②のように、下から出しててもキャンセルボタンがしっかり
反応するようになりました。

変更した部分は、黄色の部分です。

[actionSheet showInView:self.view.window];

最初に書いたときは、上の最後の部分をself.viewにしてました。
ようは、windowから出せば良かったわけです。

そのブログには、同じような問題し悩んでる人がいると
書いてありました。

私も、頭にきて上からアクションシートを出したりしてました。w

もとまかさんが有益な開発Tipsをまとめてくださってるので
この情報も、次回には載せていただけるのではないかと思います。

このTipsを教えていただいたブログのかた感謝です!


新しいアプリを申請したんだけど...

[iPhone][Apple][SDK]

昨日、新しいジャンルのアプリを申請したんですけど、
今日になって不具合を見つけてしまって
みずからリジェクトして、さっき再申請しました。

バグをとったつもりでも、一人でやってるとやっぱし
穴がありますね。

問題の箇所は、

[self performSelector:@selector(stratEnableInterface) withObject:nil afterDelay:0.5f];

だったんですけど、0.5fのところを0.1fにしてました。

たぶん、上の(stratEnableInterface)のメソッドが実行される
タイミングがはやすぎて、少したつとおかしな挙動になってました。
0.5fにかえたら、何事も無かったように動いてます。

何気なく便利だから使ってしまうメソッドなんですが、
落とし穴がありました。
皆さん、遅らせてメソッドを実行させるときはタイミングを
いろいろ試した方がいいですよ。(って私だけか!w)

そんなんで、今 申請中のiInformationPro
(いったい、いつになったら審査通るんだろう?)じゃなく、
別のジャンルのアプリを申請しました。

たまには、はやく出て欲しいな。
出たときは、よろしくお願いします。115円で?す。(^^)

[開発Tips] WiFiか3Gか判定する方法

[iPhone][SDK][Apple]

iphone_sdk.png

開発のTipsです。

しかし、いろいろ書いてるけど少しは皆様のお役に立ててるん
でしょうか?コメントいただけると嬉しいです。

今回は、アップルのサンプルを利用してネットワークの判定を
する方法です。
自分のアプリに組み込んでるんで、説明しやすいので。(^^)

まず、アップルのサイトから、Reachabilityというサンプルを
ゲットして下さい。これ便利です。
あまり難しいことは考えなくても使えます。
えーと、その中からReachability.hとReachability.mを使いたい
プロジェクトにドラッグ&ドロップしてください。
その際に、ダイアログの一番上にあるデスティネーションなんたら
かんたらにチェックを入れてください。
そうすれば、そのプロジェクトのフォルダにもコピーされます。
あと、SystemConfiguration.frameworkを追加してください。

で、サンプルコードです。
興味あるかたは、Read Moreからどうぞ...

 


iPhone開発に便利なTips

[iPhone][SDK][Apple]

iphone_sdk.png

開発のTipsです。

え?と、何かiPhoneで重い作業をさせているときに、ユーザーに
ボタン等を操作させたくないときって、ありますよね?

hogeButton.enabled = NO;

で一時的にグレーアウトしてもいいんですが、すべて操作
できないようにした方が、話は早いですよね。
そんでもって、わかりやすいように私のアプリの例です。
アプリ名は、iInfoなので、iInfoAppDelegateというファイルが
テンプレートで作成すると作られます。
使うpropertyは、userInteractionEnabledというやつです。

何をするものかというと、ユーザの操作を受け付けるかどうか
の設定をするものです。
YESがデフォルトですね。当然、操作できないとこまりますから。

すべて操作できないようにするということですが、置き換えれば
おおもとから操作できないようにしてしまえということです。
iPhoneでは、一つだけwindowをもっています。
その上に、viewControllerに対してViewというよな、基本構成で
作っていきます。(例外もたくさんありますが)
その、おおもとのwindowじたいを操作できないようにすれば
すべて、画面を触っても操作できないようになります。
で、サンプルコードです。
私のアプリのソースコードの一部ですが、

 iInfoAppDelegate *appDelegate =
  (iInfoAppDelegate*)[[UIApplication sharedApplication] delegate];
  appDelegate.window.userInteractionEnabled = NO;

これでいいのかわかりませんが、これならどこからでも直接
画面の操作をできなくすることができます。
自分のアプリの名前に置き換えてやればいいだけです。
もちろん、あとでNOのところを同じように、YESにして呼んで
やらないと操作できないままになっちゃいますよ。(笑

------このブログを見てくれてる皆様へ-----

アプリを発売するにあたって、サポートサイトが必要ということで
始めたブログですが、おかげさまで2000アクセスを超えました。
私にとっては、ビックリの数字です。
Apple-Styleの所長さん、ApplePeopleのNOBONさん
もとまかさん、AppBankさん、見てくれてる皆様。
本当に感謝しています。ありがとうございます。

これからも、不定ですが更新していこうと思います。
私のアプリともどもよろしくお願いします。

それでは、よいお年を?!

見落としてしまうメモリーリーク

[iPhone][Mac]

iphone_sdk.png

私のアプリを買っていただく人が少しはでてきたようなので
少しほっとしてます。バージョン1.1では、プロセスの表示が追加されます。
メモリークリーニングとかいろいろアップデートに向けて着々と準備中です。
どうか、皆様よろしくお願いします。

ふ?
自分がアプリを申請したときは、無料のアプリもでてなかったし、
最初にでたアプリもバージョン1.0だったんで、そんなに心配して
なかったんですが、えらい差をつけられてしまった。
買っていただけないのもしょうがないと思ってます。
でも、期待(誰もしてないかw)を裏切らないようにアップデート
していきます。

で、ここからが今日の本題です。

開発のブログといいながら、あまり記事にしてない?w
今日は気をつけた方がいいメモリーリークの落とし穴です。
もちろん iPhone だけではなくて、Mac というか Cocoa ですね。

iPhoneは、みなさんの知っているとおりメモリーが少ないですよね。
開発にあたっては、メモリー効率を考えてプログラムしなければ
いけませんよね。
ということで、初めてのサンプルコードを...

if (err == 0) {
 int *buffer;
 buffer = malloc(length);
 if(buffer == NULL){
  return;
 }

 count = 10;
 for(int i = 0; i < count; i++){
  [self.hage addObject: [[Hoge alloc]
            initWithHoge:&(buffer[i])]];
 }
 free(buffer);

一部のコードですがわかりますでしょうか?
これは、しっかりメモリーリークしています。
for文でNSMutableArrayにaddObjectしてるんですが
Hogeをallocしているのにreleaseしていませんよね。

これって以外と気がつかないんですよ。

正解のコードは、

for(int i = 0; i < count; i++){
 Hoge *hoge = [[Hoge alloc] initWithHoge:&(buffer[i])];
 [self.hage addObject: hoge];
 [hoge release];
}
free(buffer);

ようするに面倒なんですけど一回hogeのインスタンスを作って
それをaddObjectして、NSMutabuleArrayにいれたあと
hogeをリリースするということですね。
NSArrayは、addObjectしたものにはretainしますので
hogeのインスタンスはリリースしても大丈夫ってことです。

*開発のチュートリアルですが、すごくわかりやすく書いてる方
 がいます。もう、わかりますよね!もとまかさんです。
 今は、第四回目に突入しております。

 人に理解してもらうように書くというのは、とても難しいです。
 もとまかさんは、最小限の説明で疲れさせないように
 書いてるんだと思います。
 かごおたさんも記事にしておられましたが
 本気になって本を書いたらすごくうれそうです。
 もとまかさん、すごく開発のスキルありそうですよね。
 
長くなりましたが、ぜひ一度のぞいて見てください。
開発できるようになりますよ?!


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。