0

私は asiformdatarequest フレームワークを使用して画像をアップロードします。コードは次のようになります。

 NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path1=[paths objectAtIndex:0];
    NSString *filename=[path1 stringByAppendingPathComponent:@"logo.png"];  
    NSLog(@"image path = %@",filename);
    [request setFile:[NSURL URLWithString:filename] forKey:@"avatar"];
    [request startSynchronous];

私のログ:

image path = /Users/tanlusheng/Library/Application Support/iPhone Simulator/5.1/Applications/5473E6FF-0D3A-48CD-8728-0219CF25BC80/Documents/logo.png
Error Domain=ASIHTTPRequestErrorDomain Code=6 "No file exists at (null)" UserInfo=0x6b4c610 {NSLocalizedDescription=No file exists at (null)}

プロジェクトに 1 つのイメージを追加しましたが、ファイルが見つからないのはなぜですか?シミュレーターで実行しています。

4

1 に答える 1

0

画像を送信しようとしているときはDocuments、メイン バンドルではなく、アプリケーションのディレクトリから画像を送信しようとしています。ディレクトリに画像を明示的に配置しない限りDocuments(コードを介して行う可能性が最も高い)、画像は存在しません。

代わりにこれを試してください:

NSString *filename = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"];  
[request setFile:[NSURL URLWithString:filename] forKey:@"avatar"];
[request setDelegate:self]; //Make sure this class receives request alerts
[request setDidFinishSelector:@selector(someMethod:)]; //Which method to call when finished
[request startAsynchronous];

また、リクエストを非同期で開始するように変更したことに注意してください。同期的にアップロードしたくない場合は、リクエストが完了するまでアプリの実行が停止します。また、リクエストが終了したときの自己委任とセレクターも追加しました。

次に、完成したクエリをここで処理できます。

- (void)someMethod:(ASIHTTPRequest *)request
{
    NSString *response = [request responseString];
    NSLog(@"%@", response);
}

それでも null エラーが発生する場合は、イメージにTarget Membershipがあることを確認してください。これを行うには、Xcode で画像を選択し、右側の[ターゲット メンバーシップ]の下にある小さなボックスにチェックが入っていることを確認します。これにより、ビルド時にイメージがアプリケーションの一部になることが保証されます。

于 2012-05-10T12:47:03.997 に答える