2012年7月13日金曜日

NSBundleを使ったファイルパスの指定方法と、URLからデータを取得する方法

Xcodeで何かしら画像やファイルデータを呼びたいときに、
ファイルパスを指定してデータを呼び出すのですが、
そのデータを呼び出す際の方法を今日はご紹介したいと思います。


まず最初は、NSBundleを利用してファイルパスを書く方法。

------


NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile: filePath];

-------


これで、dataの中には、test.gif画像が保存されます。
「pathForResource」は、ファイルの名前で、
ofType」の方は、ファイルの拡張子を指定します。

gif以外にも、jpegや音楽ファイル、plist(プロパティリスト)など、
いろんなファイルを呼び出す事が出来ます。
次は、URLを指定して、ファイルを呼び出す方法です。

こんな感じで、 initWithStringの所に呼び出したいファイルのURLを指定しましょう。

---------

NSURL* url = [[NSURL alloc] initWithString:@"http://~~~~~.html"];
    NSURLRequest* req = [NSURLRequest requestWithURL:url];
    NSURLResponse* res;
    NSError* a_error;
    NSData* data = [NSURLConnection 
  sendSynchronousRequest:req
  returningResponse:&res
  error:&a_error];

--------


2012年7月12日木曜日

_Prefix.pchファイルとは objective-cの勉強

xcodeで何かプロジェクトを作成すると、
Other Sourceの中に入っている_Prefix.pchファイル。

このファイルに、いろいろ指定していると、
わざわざヘッダーファイルで呼び出さなくても
使えるので便利です。

例えば、
#define Image @"image"
#define serchpath @"http://www〜"

みたいによく使う名前やURLを登録しておくと便利!
ぜひ使ってみて下さい。


2012年7月10日火曜日

今表示しているViewを消す時(objective-c、cocoa)


これもいつも忘れるのでメモ。

[self dismissModalViewControllerAnimated:YES];


ただ、子供や孫のビューを消すのは
いつも面倒なんですよね。。


UITableViewの戻るボタンを設置する方法








テーブルビューの左上に出てくる戻るボタンの
表示方法です。

いつも忘れてしまうのでメモ。

-----

UIButton *backButton = [UIButton buttonWithType:101];
backButton.showsTouchWhenHighlighted = NO;
[backButton addTarget:self action:@selector(backtop:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"戻る" forState:UIControlStateNormal];
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = back;
[backButton release];
[back release];


-----

ボタンを押したときのアクションは、
こんな感じで出来ます。

------
-(void)backtop:(id)sender {
//ここに処理を明記
}

------


2012年7月5日木曜日

NSDataやNSArrayなどの変換方法(objective-c)cocoa


// NSDataオブジェクトへ変換(エンコード)
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:obj];
 
// 変換前のオブジェクトに復元(デコード)
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];


こんな感じでNSData、NSArray両方の変換が出来ます。
分からなくてエラーがいっぱい出て大変でした。。。



viewを呼び出す時のアニメーションを設定する方法(modalview)iphoneアプリの作り方


アニメーションの種類を指定して
新しいviewを呼び出す時の方法です。

これは、-(IBAction)toptopage:(id)senderという
メソッドをUIButtonに設定して、
view1を呼び出しているところです。

-(IBAction)toptopage:(id)sender {

//最初の画面の名前を指定
view1 *controller = [[view1 alloc]initWithNibName:@"view1" bundle:nil];

// アニメーションの種類を設定(ここでは画面が前後にくるっとまわるやつ)
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
[controller release]; 

}


アニメーションの種類はこんなにたくさんあります。

UIModalTransitionStyleCoverVertical
画面の下から上にビューがにょきっと出てくるタイプです。
閉じる時はビューが下にスライドして戻ります。
これはデフォルトのトランジションスタイルです。

UIModalTransitionStyleFlipHorizontal
今回のサンプルで使用したスタイルです。
3Dみたいに、画面がくるっとまわるタイプで、背面だったところが、
正面になるような動きをします。

UIModalTransitionStyleCrossDissolve
現在のビューがだんだん薄くなって、もともとあったビューが
だんだん見えてくるタイプです。
フェードイン&フェードアウトでビューを表示/非表示することが出来ます。

UIModalTransitionStylePartialCurl
ページがくるっと上にめくれるタイプのスタイルです。
ただ、いろいろと例外があるので、使い方には注意が必要です。



2012年7月4日水曜日

Xcodeのシミュレーターでiphoneのキャプチャ画像をとる方法!(apple connectでアプリをリリース時用に便利!)

いつも、アプリをリリースする時は、
実機に作成したアプリをインストールして、
iphoneの実機でキャプチャをとっていたのですが、

iphoneのバージョンをアップさせたら、
私が使っているXcodeでは対応していなくて、
iphoneの方にアプリをインストールすることが出来ませんでした。。

なので、どうやってキャプチャ画像をとろうかなと悩んでいたところ、
いいソフトに出会えたのでご紹介します。


iOS-Simulator Cropper
http://www.curioustimes.de/iphonesimulatorcropper/


これは、Xcodeのシミュレーターで表示している画像を
キャプチャ画像として指定したフォルダに保存してくれる
ソフトです。

iphoneのアプリをitunes connectからアップロードする際、
640×960の指定されたサイズでないと、
アップロードすることが出来ないので、
command + shift + 4
ではなかなか指定したサイズでキャプチャが取れないため、
今回のソフトが大活躍!!!!






最初のプルダウンのところで、
どんなキャプチャ画像をとりたいかを指定して、
ディレクトリーのところに、画像を保存したいフォルダのパスを指定。

その下のファイルネイムのところで、
キャプチャをとった際の画像保存名を指定します。


それで右下のスクリーンショットボタンを押すと、
Xcodeのシミュレーターで表示している画像を自動的にキャプチャしてくれます。

ただ、私が使用した時は、
キャプチャのサイズが320× 480だったので、
そのあとサイズを変更してアップロードできるサイズにリサイズしたのですが、、


もしよかったら使ってみて下さいー!



2012年7月3日火曜日

for文で一気にオブジェクトを作成する cocoa、iphoneアプリの作りかた

何かオブジェクトを作成するとき、


self.view1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
self.view1.backgroundColor = [UIColor clearColor];

self.view2 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
self.view2.backgroundColor = [UIColor clearColor];

self.view3 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
self.view3.backgroundColor = [UIColor clearColor];


こんな風におんなじようなコードをいくつも作成しなきゃいけない時があると思います。
ちょっとだけ表示させる位置が違うのに、
なんでおんなじようなものをいくつも書かなきゃいけないんだー!!
ってなりますよね。。

そこで、今回はfor文を使って、
簡単にオブジェクトを一気に作成する方法をご紹介します。

まずは気になるコードから。

------
//======テキスト部分(タイトル)の設定======
NSURL *url = [NSURL URLWithString:@"http:/had1.txt"];
NSStringEncoding usedEncoding;
NSError *error;
NSString *result = [NSString stringWithContentsOfURL:url usedEncoding:&usedEncoding error:&error];
if (result == nil) {
} else {
//一行づつ読み込んで処理する
NSArray *array = [result componentsSeparatedByString:@"\n"];

//表示位置を指定するための数値を用意
int boxdata = 60;

//ここから繰り返し処理
for (int i = 0; i < [array count]; i++) {

UITextView* labelname[i];
labelname[i] = [[UITextView alloc] initWithFrame:CGRectMake(90, boxdata, 220.0, 25.0)];
labelname[i].font = [UIFont fontWithName:@"HiraKakuProN-W6" size:14];
labelname[i].textAlignment = UITextAlignmentLeft;
labelname[i].editable = NO;
labelname[i].scrollEnabled = NO;
labelname[i].userInteractionEnabled = NO;
labelname[i].textColor = [UIColor colorWithRed:72/256.0 green:88/256.0 blue:89/256.0 alpha:1.0f];
labelname[i].backgroundColor =[UIColor whiteColor];
labelname[i].autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
labelname[i].text = [array objectAtIndex:i];
[self.wv insertSubview:labelname[i] atIndex:1];

//表示位置をちょっとづつ変えていく
boxdata = boxdata + 61;
}
}

------


コードをみてもらえれば、
やっている事がすぐに分かると思うのですが、
一つ前のブログでご紹介した様に、
外部にアップしているテキストデータを読み込み、
改行ごとに、一列づつテキストデータを保存。

保存したテキストデータを、
配列を利用して、for文で順番にセットしています。

今回つまずいたのは、
オブジェクトの名前も配列のように
UITextView* labelname[i];で用意してあげること。

これで少しはコードを書く行数が節約できました!


外部のサーバーにアップされている情報をURLを指定して読み込む方法 iphoneアプリの作りかた


アプリの中に、オブジェクトとして保存してしまうと、
リリースしたあとに気軽に中の情報を書き換える事が出来ません。

なので、今後変更される予定があるものや、
今後更新される可能性があるものは、
外部に情報を保持し、そこの情報をアプリが読み込むという方法を
行なう事で、アプリ内の情報を気軽に更新することが出来ます。

今回は、サーバーにアップされているテキストデータを読み込んで、
アプリ内に表示する方法をご紹介します。


--------------
//URLや読み込む際の文字コードを指定してファイルを読み込みます。

NSURL *url = [NSURL URLWithString:@"http://~~URL~~~.txt"];
NSStringEncoding usedEncoding;
NSError *error;
NSString *result = [NSString stringWithContentsOfURL:url usedEncoding:&usedEncoding error:&error];

//もし読み込んだ結果が何もなかった場合の処理
if (result == nil) {
} else {

//情報が読み込まれた時の処理
//改行ごとに、配列にテキストデータを保存します。
NSArray *array = [result componentsSeparatedByString:@"\n"];
//デバッガに読み込まれた情報をかき出します。
NSLog(@"array = %@" ,array);
}

------------------


こんな感じで外部のテキストデータを読み込むことが出来ました。

Xcodeで苦労して作ったファイルを空のファイルでa上書きしてしまった、、

以前して、何日間かかかけて苦労して作ったファイルを
空のファイルで上書き保存してしまいました。。

いろいろ調べても、
デバックしたファイルから復元は出来ないし、
途方に暮れていたら、なんとゴミ箱に復元したかった
ヘッダファイルとメソッドファイルが捨てられてありました!!!

xibの方で、再度アクションなどを繋げ直し、
何度か試行錯誤したらきちんとファイルが元通りになりました。

昔のファイルはきちんと保管しておかなきゃいけないですね。。
ファイルを作り直していて、
いろいろ忘れていた事を思い出したのでメモ。

以前こちらの記事で紹介してもらった、
NSUserdefaultの使い方。
http://luminosite-jwell.blogspot.jp/2012/06/nsuserdefaultsiphone.html


■UIViewにUITableViewを自分で追加した時は、
きちんとUITableViewDataSource, UITableViewDelegateを追加しないといけない。


■UIPickerを使って、データを扱う時は、こちらも同じ様に、
UIPickerViewDelegate,UIPickerViewDataSourceを追加しないといけない。



@interface okiniiri : UIViewController <UITableViewDataSource, UITableViewDelegate,UIPickerViewDelegate,UIPickerViewDataSource> {


UIButton *customButton1;
NSMutableArray *contents;
NSMutableArray *activities;
UIPickerView *picker;
UIButton *donebtn;
UIView *doneview;
IBOutlet UITableView *categoryTableView;
IBOutlet UIBarButtonItem *sakujyobtn; 
}

@property (nonatomic,retain)UITableView *categoryTableView;
@property (nonatomic,retain)UIButton *customButton1;
@property (nonatomic,retain)UIPickerView *picker;
@property (nonatomic,retain)UIButton *donebtn;
@property (nonatomic,retain)UIView *doneview;
@property (nonatomic,retain)UIBarButtonItem *sakujyobtn;
@property (nonatomic,retain)NSMutableArray *contents;

-(IBAction)setEditing:(BOOL)editing animated:(BOOL)animated;
-(IBAction)setEditingadd:(BOOL)editing animated:(BOOL)animated;

@end