嗨善良的人我想,以防止iOS版 - 应用程序冻结当我获取请求死锁
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{ CODE });
冻结,但我不知道如何使用功能..我不知道在哪里把managedObjectContext以及如何使用这个dispatch_async我的代码是:
- (void)updateFacebookFriendsHighScore{
NSFetchRequest *requestche =[NSFetchRequest fetchRequestWithEntityName:@"Time"];
[requestche setReturnsObjectsAsFaults:NO];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"timeid==1"];
requestche.predicate=predicate;
NSArray *getIDTime = [self.managedObjectContext executeFetchRequest:requestche error:nil];
NSString *getTheTime = [[getIDTime valueForKey:@"time"] componentsJoinedByString:@""];
NSNumber *timeInInt = [NSNumber numberWithInteger: [getTheTime intValue]];
int timeFromDB = [timeInInt intValue];
timeFromDB = timeFromDB + 509;
int timeNow = [[NSDate date] timeIntervalSince1970];
if(timeNow > timeFromDB){
NSFetchRequest *updateHighScoreRequest = [NSFetchRequest fetchRequestWithEntityName:@"Friends"];
[updateHighScoreRequest setReturnsObjectsAsFaults:NO];
NSArray *friendsToUpdate = [self.managedObjectContext executeFetchRequest:updateHighScoreRequest error:nil];
for(NSArray *friendId in friendsToUpdate){
NSString *getFriendId = [friendId valueForKey:@"fbid"] ;
NSString *siteURL = [NSString stringWithFormat:@"http://www.example.com/example.php?fbid=%@", getFriendId];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:siteURL]];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *resultsFromDB = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSNumber *theScoreForUpdate = [NSNumber numberWithInt:[resultsFromDB intValue]];
NSFetchRequest *updateTheHighScoreRequest = [NSFetchRequest fetchRequestWithEntityName:@"Friends"];
NSPredicate *updateTheHighScorePredicate = [NSPredicate predicateWithFormat:@"fbid==%@",getFriendId];
updateTheHighScoreRequest.predicate=updateTheHighScorePredicate;
Friends *setScore = [[self.managedObjectContext executeFetchRequest:updateTheHighScoreRequest error:nil] lastObject];
NSLog(@"%@", setScore);
[setScore setValue:theScoreForUpdate forKey:@"score"];
[self.managedObjectContext save:nil];
data = nil;
resultsFromDB = nil;
theScoreForUpdate = nil;
setScore = nil;
}];
updateHighScoreRequest = nil;
}
}
requestche = nil;
}
此代码从数据库中获取的时间和从CD结果更新509秒后的高分,当我运行这个要求我的应用程序冻结(死锁) 。 我来自保加利亚,我正在努力学习目标C.在这里,我们没有学校,因为我们的国家在所有情况下都非常糟糕,保加利亚在欧洲联盟中排在最后...... 一些认真和善于帮助的人我与我的代码或解释如何在Objective C中工作的一切,或只帮助我呢?
您是否在应用程序中使用线程?如果你了解他们是什么? –
你有Skype帮助我,我会在这里发布答案,我会向不知道像我这样的人解释:) 我的Skype是:smoka_bogdan –
抱歉不是现在,我在办公室。可能在某个时间晚些时候。 –