如何在If语句中使用NSMutableString作为Condition

时间:2012-07-03 21:46:24

标签: objective-c ios nsstring asihttprequest nsmutablestring

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

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

ASIHTTPRequest只有一个(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;

Vote.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

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

2 个答案:

答案 0 :(得分:2)

当您将某个内容定义为属性(checkRequest)时,请在代码中引用它时使用self.checkRequest,除非您有非常良好的理由不这样做。如果直接访问变量,那么放在属性语句中的属性将被忽略。

答案 1 :(得分:1)

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

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

self.checkRequest = [NSMutableString stringWithString:@"like"];