gpt4 book ai didi

ios - 发生多个POST请求

转载 作者:行者123 更新时间:2023-11-29 10:36:28 26 4
gpt4 key购买 nike

我在带有Rails / Heroku后端的iOS应用上看到奇怪的行为。我会尝试提供尽可能多的细节。希望有人可以指出可能出现问题的几个区域。

我使用XCode 5编写了一个iOS 7应用程序,用户可以在其中登录并发布新文章和评论。我正在使用AFNetworking库与后端服务器(Rails 4,Heroku和Postgres)进行通信。我正在以JSON格式进行发布和获取,因此我利用AFJSONRequsetOperation来处理通信。

我所有的POST都使用此方法:

- (void) Post:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, id JSON))success
:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON))failure


// allocate a reachability object
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];


reach.unreachableBlock = ^(Reachability*reach)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIWindow *window = [[[UIApplication sharedApplication] windows] lastObject];
[HUD flashMessage :@"Whoops" :@"No internet connection" :window];
});

failure(nil, nil, nil, nil);
};

reach.reachableBlock = ^(Reachability*reach)
{

// prepare base URL and calculate signature
// Something like: https://myapp.herokuapp.com
NSURL *url = [NSURL URLWithString:BasePath];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[httpClient setDefaultHeader:@"Accept" value:@"application/json"];

// Generates the POST URL
// Something like: https://myapp.herokuapp.com/api/v1/articles.json
NSString *basePath = [self GetPostURL];

NSLog(@"Post %@ With parameters: %@", basePath, Parameters);

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:basePath parameters:Parameters];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:success failure:failure];

[operation start];
};


[reach startNotifier];

}

我在iPhone 5上做了一些测试。在表格视图中查看文章列表,在详细信息视图中查看文章详细信息,然后在另一个表格视图中查看和添加评论。我做了很多测试,没有发现任何问题。最终,我看到有3条完全相同的评论。我以为我必须点按两次“添加”按钮,所以请禁用该按钮。我不再考虑它了,因为几乎无法重新创建它。

此后,我将手机更新为iOS 8,并更新了XCode和SDK以反映这一点。
我将应用程序放在 friend 的手机(iOS 8和iPhone 5 C)上。她用了一天没有发现任何问题。她查看了文章,评论并添加了自己的文章,没有任何问题。

今天是一个不同的故事。
首先,介绍一些背景信息。当您打开应用程序时-我刷新了文章列表,因此该应用程序通常显示为显示旧的文章列表,然后出现一个加载图标,表格视图闪烁并显示最新的文章。

当她今天打开该应用程序时-它多次闪烁,看起来好像是10左右。当表格视图出现时,她昨天发布的文章出现了两次。确切的文章(标题,描述,经/ Lng,图像)出现了两次,但时间戳不同。

我以为该应用正在她的手机上播放,所以我检查了后端。它有两篇不同的文章,不同的id和时间戳,但其他方面完全相同。

查看日志,她的帐户发出了类似20/30 GET的请求。这似乎与打开时的闪烁相对应。它多次更新了tableview。

然后日志显示了一个POST请求以及她前一天发布的所有参数。好像她今天实际上发表了完全一样的文章-但显然她没有。

有人看过这种东西吗?

我唯一能想到的是:
  • 在初始发布后,添加商品视图控制器未销毁,并且又以某种方式再次处于 Activity 状态。我以为ARC将处理所有这一切?
  • 也许AFNetworking库没有刷新,并认为需要再次发布?尽管将近24小时。
  • 库上是否有请求批处理操作?也许这可能是个问题?
  • 发布时我使用“dispatch_get_global_queue”。这个可以吗?
  • 成功添加文章后,我将使用以下代码再次移至列表。也许有一个我不知道的问题?

  • ArticleListViewController *articleList = (ArticleListViewController *)[self.storyboard instantiateInitialViewController];
    articleList.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self articleList animated:YES completion:nil];

    我不知所措,甚至尝试复制它,更不用说修复它了。
    我认为将手指指向应用程序是正确的吗? heroku / rails似乎不是问题。

    任何帮助将不胜感激。

    更新

    我刚遇到这个问题。
    我昨天做了一些测试,添加了3篇文章。一切都按预期进行。我偶尔每隔几个小时就会进入该应用程序,以确保一切正常。我刚刚打开应用程序,它开始闪烁。它用我昨天发布的新文章更新了列表。我什么也没做,它又忽隐忽现,并再次添加了同一篇文章(所以今天的created_at日期有2个重复项)。我继续不进行任何操作,在几秒钟后,我昨天添加的其他两篇文章也已更新。一篇文章被添加了3次,一篇文章被添加了2次,而一篇文章被重复了一次。这是奇怪的行为。

    可能有某种全局变量或某种保留所有数据的东西吗?也许控制器没有被完全移除?

    布赖恩

    最佳答案

    经过无休止的测试。我发现了问题。

    重复的POST随机发生。当它确实发生时,似乎只发生1%的时间,有时5分钟后,有时一天后。

    我最终发现,这与从3G切换到WiFi有关。
    添加有关3G的文章,然后更改为WiFi会导致重复。

    问题出在我上面的代码中的Reachability块。
    我启动可达性通知程序,并为可达性和不可达性设置了两个块。
    当电话更改可达性状态时,这些块将被命中。因此,从3G转移到Wifi再次触及了可达的障碍,导致重复的POST。

    一个简单的解决方法是在每个块的开头调用以下行,以防止进一步的更新:

    [reach stopNotifier];

    或者,实现可达性,例如:
    -(BOOL)reachable {
    Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
    return NO;
    }
    return YES;
    }

    // In POST method
    if([self reachable])
    {
    // Do POST
    }else{
    // No connection
    }

    关于ios - 发生多个POST请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691199/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com