如何在块内更改对象的值(作为参数传递)

时间:2014-02-06 20:43:01

标签: ios objective-c nsstring

我的一个函数中有一个POST请求块,我想更改块内的NSString对象的值。

我意识到通常可以在变量__block前添加前缀,但在我的情况下,想要通过直接引用其参数来更改NSString对象的值。

这是一个代码框架,带有相关注释。

- (void)getItemInformation:(NSString *)inputString{
    //setup stuff
    [manager  POST:@"http://foo.com/iphone_item_string/"
        parameters:parameters
           success:^(AFHTTPRequestOperation *operation, id responseObject) {
               //change inputString directly here
               inputString = (NSString *)responseObject[0];
               //this of course gives an error, but I'm
               //unsure of how to use __block with a parameter
           }
               //foo
           }
     ];
}

来自调用函数的段

currentEntryData.foo = "lorem";
NSString *retrieveString;
[self getItemInformation:retrieveString];
currentEntryData.bar = retrieveString;
currentEntryData.oof = "ipsum";

1 个答案:

答案 0 :(得分:6)

您可以使用块

- (void)getItemInformationWithCallback:(void(^)(NSString *resultString))callback {

    [manager POST:@"http://foo.com/iphone_item_string/"
        parameters:parameters
           success:^(AFHTTPRequestOperation *operation, id responseObject) {

               // Here you call the callback block
               //
               NSString *newString = (NSString *)responseObject[0];
               if (callback)
                   callback(newString)
           }
     }];
}

这就是你如何获得字符串

[self getItemInformationWithCallback:^(NSString *resultString) {
    NSLog(@"%@", resultString);
}];