Re:

のあんのブログ

タグ:Objective-C

なながつです!


Single View のプロジェクトを Storyboard で作ると、、、AppDelegate.m から ViewController.m のインスタンスにデフォでアクセスできない!!!

という、いまいち理解できてない Xcode の魔の手に掛かりましたw 


そんなんで悩んでました、そして疲れ果てました。


ViewController.m において、

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
appDelegate.viewController = self;

としてインスタンスを代入してやんないと、AppDelegate.m で扱えなかったのでした。


やること。

AppDelegate.h で ViewController を @class ViewController; して、@property (retain, nonatomic) ViewContorller *viewController; する(ViewController から参照できるようにするため)。

ViewController.m で、#import "AppDelegate.h" して、さっきのインスタンス代入する。



これで、[viewController.webView loadRequest:request]; とか、viewController.testLabel.text = @"test da yo!!" できるよーう。



いろいろと理解しているようでしていない実情に、嗚呼、死にたいわ/(^o^)\


※はじめに、ここで言うWEB技術ってのは単に webView を指します(・ω<)

今回の(とは、ポケットウォーズのこと)技術的な部分と言ったらバーコードスキャンなんだけれども、Mobile Safari でもう一点「音の同時再生ができない」という制約もある。

シングルトンなんだってさ。

プリロードも効かないから少しの遅延も起こる(これはテクニックで回避可能っちゃ可能(らしい)。まあ予めインスタンス化しておくとか、そんな感じ?)。


そのため、webView からスキームでネイティブのメソッドを実行させることで、BGMとSEの同時再生だったり、ボタン連打の連続した音だったり、バーコードスキャンを立ち上げたりといった連携技が可能だ。可能だ、というか、そのために側はネイティブで実装し AppStore から世に出す!


ちなみに、スキームの呼び出しは location.href だと連続でコケるので、iframe を作って消しての呼び出しにすれば解決する。


ネイティブ側での拾い方は、UIWebViewDelegate に自身クラスを設定して(self.webView.delegate = self とか。ヘッダでプロトコル追加も忘れずに <UIWebViewDelegate>)、リクエストがロードされるときに呼び出されるメソッド

相変わらずなげーなあああ

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

でフックすれば(・∀・)イイ!!ってばよ!

{

if ([request.URL.scheme isEqualToString:@"native"]) {
// native://scan?key1=value1 とか呼び出された時に処理する内容
return NO; // ロード中断

}

--

そんでもって、行ったからには戻ることもたまには必要ってことで、ネイティブ側からウェブ側も最後に操作する。

こんな関数がウェブのコードに書かれていたら

function fromNative(message)
{
alert(message);
}

ネイティブ側からは webView に対して JavaScript 文字列を渡せば良いだけだってよ!実に簡単である。

NSString *message = @"ネイティブのメッセージだよ!";

NSString *javascript = [NSString stringWithFormat:@"fromNative(%@)", message];

[self.webView stringByEvaluatingJavaScriptFromString:javascript];

ブラウザに返すのかサーバに返すのか引数で処理分けとかしておくのも良さそう。

クエリ(native://scan?key1=value1 の key1=value1 部分)は
request.URL.query で取り出せる。また、ホスト( scan の部分)は request.URL.host で取り出せる。


あとは、バーコードからのモンスター出現ロジックをどうしよう。

女性以外と会って話すのは初めてで、果たして話が弾むのだろうかーといくぶん曇りながらプロントで待ち合わせ。

・・・プロント無いwww

駅前のプロントがファミマになっってる!w

えーいつからだよ・・・知らなかった。南町通りちょっと行ったベローチェも無いし、変わった事に気づかずに暮らしてた。


22才の大学生。

就活大変そうだね!って、就職じゃなくて個人事業を望んでるらしいよ。

3時間くらいソーシャルアプリのこととか話して帰ってきた。とりあえずトヨタのソーシャルアプリアワードやろうぜ?ってね。


しかしスーツで来るとは、真面目過ぎるw



一つ前のエントリに関しては、とりあえず実際に試して確認する!

[self updateWebBrowser:view] がどうなるんだろーね。

_IGP5666

Tポイントが1,800ポイントくらいあったので、Objective-C逆引きハンドブックをTSUTAYA onlineで買っとく。極力、現金回避。




買って放置してた本を読み進めてます。

漠然とiPhone SDKを使ってたけど、そりゃ前進しないね(するにも時間がかかる)。

と、やっと少しずつ理解し始めた。

基本の基本を押さえることで、分かってきたという実感をもって上達していく。

これは、perlはじめた時の感覚だなぁ。

超初心です。

でも、解らなくてつまんないという思考より、ちょっとずつでも解る方が遥かに良いのは言わずもがな。



という訳で、iPhoneアプリ作成はそこまで敷居の高いものではなく感じてきた次第。

一度理解すれば、それなりのものは作れるね。


職の幅が広がるかな?(・ω・)

↑このページのトップヘ