WebサービスとiOSアプリケーションがあります。ヘッダーを使用 ASIHTTPRequest.h, ASIFormDataRequest.h
して、phpスクリプト/mysqlデータベースへの接続を処理します
ビューコントローラーの1つで、Webサービスに複数の要求を送信し、各応答を処理する必要があります。また、ビューコントローラーのビューとメソッドは、各要求の後に更新する必要があります。
ASIHTTPRequest
イベントが1つしかないため、リクエストを処理するため(void)requestFinished:(ASIHTTPRequest *)request
に内部のブロックで応答を処理する必要があり(void)requestFinished:(ASIHTTPRequest *)request
ます。文字列を使用できる可能性があり、リクエストが終了すると、次のコードを記述したifステートメントでこの文字列を使用できます。 requestfinishメソッドの条件が機能しませif ([checkRequest rangeOfString:@"like"].location != NSNotFound)
ん
VoteMe.h
@interface VoteMe : UIViewController<UITextFieldDelegate>{
NSMutableString *checkRequest;
}
@property (retain, nonatomic) NSMutableString *checkRequest;
投票.m
@synthesize checkRequest;
- (void)viewDidLoad
{
[self showPicture];
}
-(void)showPicture
{
checkRequest =[NSMutableString stringWithString:@"showPicture"];
//request a random picture url, from server
NSURL *url = [NSURL URLWithString:showpicture];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
-(IBAction)voteLike:(id)sender{
checkRequest =[NSMutableString stringWithString:@"like"];
NSURL *url = [NSURL URLWithString:voteup];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
[self showPicture];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
if ([checkRequest rangeOfString:@"like"].location != NSNotFound) {
//do smth
}
if ([checkRequest rangeOfString:@"showPicture"].location != NSNotFound) {
//do someth else
}
}
上記のコードの問題-(IBAction)voteLike:(id)sender
は、呼び出されたときにの文字列checkRequest
を「like」に変更することになっているため、ASIFormDataRequest
条件が適切に機能する場合は、の応答が到着したときに
ブレークポイントでは、checkRequestが表示されますVariable is not a CFString
Nsstring
代わりに使用した場合NSMutableString
も同じ結果になります
後でretain
文字列が必要になることはわかっていますが、それでも必要な場合は使用しないでくださいrelease
alloc
retain/release
どうすれば目標を達成できますか?上記のステートメントまたは修正NSString
とNSmutableString
問題かどうかを確認するためのより良い解決策がありますか?