私たちの会社では、OS X Mountain Lion で完全に動作していた Mac アプリを使用しています。OS X Mavericks にアップグレードした後、動作しなくなりました。まだすべてをアップグレードしていないため、ML マシンではまだ機能し、Mavericks マシンでは機能しないことがはっきりとわかります。
コードに飛び込んで Xcode 5 から実行すると、Trello への API 呼び出しを作成する次のコードのチャンクが期待どおりに動作していないことがすぐに明らかになりました。
NSString *token = [[NSUserDefaults standardUserDefaults] objectForKey:TRELLOTOKEN];
NSLog(@"TOKEN: %@", token);
NSString *urlString = [NSString stringWithFormat:@"/1/cards/%@/idList?value=%@&key=%@&token=%@", taskID, DOINGLISTID, TRELLOKEY, token];
NSLog(@"URLSTRING: %@", urlString);
NSURL *url = [NSURL URLWithString:urlString relativeToURL:[NSURL URLWithString:TRELLOLOGENDPOINT]];
NSLog(@"URL: %@", url);
出力:
TOKEN: thetokenstring
URLSTRING: /1/cards/.../idList?value=...&key=...&token=thetokenstring
URL: (null)
... の taskID、DOINGLISTID、TRELLOKEY 変数を変更して、短く匿名にしました。キーにエスケープが必要な文字が含まれていないことを保証できます (ML でもエスケープが必要でした)。
問題は、NSURL URLWithString 関数で割り当てた後、私の url 変数が null のままであることです。
NSString *token 変数に文字列を割り当てるだけで、この状況を修正する方法があります。したがって、最初の行を次のように置き換えると:
NSString *token = @"thetokenstring";
その後、動作します。必要に応じて、NSLog 出力からトークンをコピーして貼り付けることができます。
出力:
TOKEN: thetokenstring
URLSTRING: /1/cards/.../idList?value=...&key=...&token=thetokenstring
URL: /1/cards/.../idList?value=...&key=...&token=thetokenstring -- https://trello.com
明らかに、NSUserDefaults からのトークンが必要です。
誰かがこれに光を当てることができますか? これが機能しない理由 (これ以上) と、それを修正する方法を知りたいです。
私はすでに次のことを試しました:
- NSUserDefaults の結果を明示的に NSString にキャストします。
NSString *token の初期化:
[NSString stringWithString:...]
残念ながら不運…