1

私たちの会社では、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:...]

残念ながら不運…

4

2 に答える 2

1

わかりました、私は解決策を見つけました。Ken Thomases の優れたコメントに基づいています。

トークンに改行文字が含まれていることが判明しました。かなりばかげているように聞こえますか?これは、ユーザーがアプリを承認した後、非常に単純なページの DOM からコードを除外する必要があるために発生する可能性があります。

NSURL の実装が少し変更されたため、URL 文字列の末尾に改行文字が許可されていないと思います (許可されるべきではありません)。ただし、他の実行可能な説明の存在を排除するつもりはありません。

于 2013-11-14T07:28:15.603 に答える