iOS:强制服务器提供更新的数据

时间:2014-01-23 02:18:16

标签: ios objective-c rest web

我正在开发一个iPad应用程序,它从服务器请求数据,更改并提交数据,然后从服务器重新请求数据,并将其显示给用户。该应用程序更新数据就好了(相当的Web应用程序看到更新发生),但iPad应用程序取回的数据是旧数据。我想也许它是NSURLRequest上的缓存标志,但它看起来不像。

这是我的一系列电话:

NSString* currentStuff = self.fCurrentIndex.currentStuff;
NSError* err = nil;
[self.fCurrentIndex approve:currentStuff withUsername:username andPassword:password error:&err];

if (err == nil)
{
    // rebuild the case list (grab the data from the URL again first)
    [self getCaseListViaURL]; // grab the updated data
    [self setupUIPanel]; // display it
}

这是抓取数据的代码('getCaseListViaURL'调用):

NSURLResponse* response;
NSError* err = nil;
NSMutableDictionary * jsonObject = nil;
NSString * urlRequestString;

urlRequestString = [method to get the URL string];

NSURL * url = [NSURL URLWithString:urlRequestString];
NSURLRequest * request = [NSURLRequest requestWithURL:url
                                          cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                      timeoutInterval:60];

NSData * data = [NSURLConnection sendSynchronousRequest:request
                                      returningResponse:&response
                                                  error:&err];

if (err == nil)
{
    jsonObject = [NSJSONSerialization JSONObjectWithData:data
                                                 options:NSJSONReadingMutableContainers
                                                   error:&err];
}

if (err && error) {
    *error = err;
}

return jsonObject;

有没有办法强制服务器提供更新的数据?

提前致谢。

编辑:根据评论,我将更新的顺序添加到服务器并随后拉动:

这会推送到服务器:

NSString* currentStuff = self.fCurrentIndex.currentStuff;
NSError* err = nil;
[self.fCurrentPatient approveStuff:currentStuff withUsername:username andPassword:password error:&err];

'approveStuff'最终调用的地方:

__block NSData * jsonData;
__autoreleasing NSError * localError = nil;

if (!error) {
    error = &localError;
}

// Serialize the dictionary into JSON
jsonData = [NSJSONSerialization dataWithJSONObject:data
                                           options:NSJSONWritingPrettyPrinted
                                             error:error];
if (*error) return nil;

NSURLResponse* response;
NSString * urlRequestString;

urlRequestString = [self urlStringForRelativeURL:relativeURL
                                 withQueryParams:params];

NSURL * url = [NSURL URLWithString:urlRequestString];
NSMutableURLRequest * request;
request = [NSMutableURLRequest requestWithURL:url
                                  cachePolicy:self.cachePolicy
                              timeoutInterval:self.timeOutInterval];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:jsonData];
[request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

jsonData = [NSURLConnection sendSynchronousRequest:request
                                 returningResponse:&response
                                             error:&localError];
NSMutableDictionary * jsonObject;

if (localError == nil)
{
    jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
                                                 options:NSJSONReadingMutableContainers
                                                   error:&localError];
}

if (error && localError) {
    *error = localError;
}

return jsonObject;

在此之后,我调用前面提到的get调用并重建UI。现在,如果我在获取时粘贴断点,并检查Web服务器上是否在推送后更新数据,我看到数据存在。但是,当我让get操作继续时,它会给我旧的数据。

1 个答案:

答案 0 :(得分:0)

所以看起来问题出现在服务器上。服务器端有一些数据结构在发布数据时没有刷新。