0

我有一个 web 服务和 ios 应用程序。我使用 ASIHTTPRequest.h, ASIFormDataRequest.h标头来处理与我的 php 脚本/mysql 数据库的连接

在其中一个视图控制器中,我需要向我的 Web 服务发送多个请求并处理每个响应,并且每次请求后都需要刷新视图控制器的视图和方法。

ASIHTTPRequest只有一个(void)requestFinished:(ASIHTTPRequest *)request事件,所以我需要在块内处理我的响应(void)requestFinished:(ASIHTTPRequest *)request来处理请求我的 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为“喜欢”,所以当响应ASIFormDataRequest到达时,如果条件可以正常工作

在断点我看到 checkRequestVariable is not a CFString

当我使用Nsstring而不是NSMutableString它时,结果相同

我知道之后我需要retainStringrelease但我alloc不应该使用我仍然需要retain/release

我怎样才能实现我的目标?是否有更好的解决方案来检查 if 语句或修复NSString上述NSmutableString问题?

4

2 回答 2

2

当您将某物定义为属性 ( checkRequest)self.checkRequest时,请在代码中引用它时使用,除非您有充分的理由不这样做。如果您直接访问该变量,则您放在属性语句中的那些属性将被忽略。

于 2012-07-03T21:51:41.587 回答
1

请求完成时 checkRequest 不是字符串的原因是它已被释放,因为您永远不会保留它。您已经创建了一个保留属性,但在您直接访问实例变量时并未使用它。

要使用您的属性保留 checkRequest,您必须编写

self.checkRequest = [NSMutableString stringWithString:@"like"];
于 2012-07-03T21:52:56.920 回答