iOS9以降の言語コードは 言語 * 地域 で変わる
NSURLConnectionでonSuccessに来るけどデータが受け取れなくてハマった話
この間
アプリがサーバに渡すデータをjsonで作成し、サーバに通信するとonSucceed(通信成功)するけど
サーバから受け取ったjsonが不正だというエラーがでていた
ちょうどiOS9ビルドに切り替えたタイミングだったのでアプリ側にミスがあるだろうと思っていた
具体的にはこんな感じ(超うろ覚え)
- (void) sendMethod { [myClass send:url data:json onSuccess:onSuccess onFailure:onFailure]; } - (void) onSuccess:(id) data { if ( !data ){ NSLog(@"データなし"); } }
調べた方法は下記
送信しているjsonの型は正しいのか?(jsonチェッカーなどで調査)
- 問題なし
送信しているjsonに入れているデータは仕様書で使用してはいけない文字を使っていないか?
- 問題なし
(サーバが2台あるので)リリース向けサーバとテスト向けサーバで同様の事象が起こっていないか
- リリース向けサーバのみで起こっていた
サーバにアクセスが行っているか
- 来ていた
受け取ったjsonのfremworkが古すぎるのか?
- 古かった。入れ替えてもいいが最後の手段にした
ATS対応漏れをを疑った
- 正常
iOS8ビルドに戻した
- できない
あれ、とここで気づいた
今まで動いていたはずの物が今は動いていない
しかもコードに変更は入れていない
やっとここでサーバに問題があることに気づいた
よくよく考えたらサーバが500エラーを返していた。
そういえばonSuccessってエラーを返してもonSuccessに入るんだった。。。
これって切り分ける方法ってないんですかね。。
Objective-cのクラスの概念
objective-cを書いていて1年くらい経ちますが...
未だにクラスメソッドとインスタンスメソッドの使い分けに自信が無いです。
クラスを更に考える(1/8):初心者のためのObjective-Cプログラミング入門
クラスメソッド
- + (void) classMethod;
- - (void) instanceMethod; てきな感じて、+,-でかき分けています。
何が違うのかっていうと クラスメソッドはallocしなくてもメソッドを呼ぶことができるんです。
っていうことはメソッドを呼ぶ時に
TestClass *tClass = [TestClass alloc] init]; [tClass testMethod];
ではなく
[TestClass testMethod];
で呼べるのです。
だったら全部クラスメソッドでいいじゃん(初心者的思考)
しかし、制約があります
リンク先にもあるよう、原則クラスメソッドだけで完結するようなものでなければいけないのです。
クラスから直接インスタンスメソッドを呼び出すこともできません。つまりクラスメソッドは、クラスメソッドだけで完結するような形で作成されることになります。そう考えると、用途はだいぶ限定されると言っていいでしょう。
つまり
+ (void) classMethod { [self instanceMethod]; } - (void) instanceMethod { ... }
というような使い方はできないのですね。
使いどころをまだまだ極められませんが。。。
これからも勉強を続けます!!
the application you have selected does not exist
iOSって申請するときって
- XcodeのArchiveを選択
- Organizerが現れる
- validateを選択し、Apple側でチェック
- submitボタンを押す
- Appleにバイナリを提出するまで待つ
って感じなんだけど。
今日一度Appleに提出したバイナリを却下し、再申請をしました。
諸事情でprovisioningも更新。
その時にsubmit時に初めてこのエラーが出たので困惑しました。
"the application you have selected does not exist"
調べてみたらこんな記事と出会いました。
記事によると
・Xcodeは自動的にプロビジョニングプロファイル管理します。
・これは、すでに存在していたアプリの更新でした。
・Xcode6
同じだ
あ、もしかして再提出の時はエラーを吐いてるっぽい
理由はiTCのバグ。
解決方法としては、
- submitではなくexportする
- AppStore用に書き出す
- Application Loaderを使って提出する
これで無事申請することができました。
もしかしたらXcode7ではこの事象は無いのですかね
さっさとXcode7にしたい