2014-09-10 4 views
0

먼저 IOS 또는 AFNetworking이 아닌 내 자신의 코드가 설정되는 것과 관련하여 문제가 있다고 말하고 싶습니다.IOS 7 AFNetworking 2.0보기 새로 고침 문제

서버의 업데이트 된 JSON 응답 개체가 수신되고 있어도보기가 즉시 새로 고침되지 않는 예를 하나 표시 할 예정입니다.

첫 번째보기에서 2 개의보기가 사용되고 있으며 아래의 단추를 누르면 첫 번째보기에 표시 될 이미지를 업로드 할 수있는 두 번째보기로 이동합니다.

- (IBAction)editImage:(id)sender { 
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
TDUserProfileViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"TDUserProfileImageEditViewController"]; 
[self.navigationController pushViewController:vc animated:YES]; 
} 

다음은 새 데이터를 서버에 업로드 한 다음 서버의 이미지 주소와 관련된 새로운 데이터를 얻는 코드입니다. HUD를가 중지하고보기에 다시 버튼을 칠 때 첫 번째보기에서 새로 업로드 된 이미지가 있어야 가정된다 이상

- (IBAction)dataSubmitToServer{ 


// NSLog(@"photo: %@", self.photoData); 
NSString * userID = [[NSUserDefaults standardUserDefaults] objectForKey:USERID]; 
//make the call to the web API 
NSString* command = @"setProfilePhoto"; 
self.params =[NSMutableDictionary dictionaryWithObjectsAndKeys:command, @"command", userID, @"userid", nil]; 

////////////////// 
NSLog(@"%@", self.params); 


self.photoName = @"newname.png"; 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 



manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager POST:BaseURLString parameters:self.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

    [formData appendPartWithFileData:UIImageJPEGRepresentation(self.userPhoto.image, 1) 
           name:@"image" 
          fileName:self.photoName 
          mimeType:@"image/jpeg"]; 
} success:^(AFHTTPRequestOperation *operation, id responseObject) { 


    NSLog(@"JSON: %@", responseObject); 

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

    NSLog(@"Error: %@", [error localizedDescription]); 

    [TDPublicFunctions showDefaultAlert:@"Error" body:[error description]]; 
}]; 

[self getNewProfileData]; 


[[NSUserDefaults standardUserDefaults] synchronize]; 


} 

-(void)getNewProfileData{ 
/*start getting new data for profile pic and status message*/ 

NSString* command = @"displayProfileData"; 

NSString * userID = [[NSUserDefaults standardUserDefaults] objectForKey:USERID]; 

NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys:command, @"command", userID,@"userid", nil]; 

NSLog(@"%@", params); 
[SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeBlack]; 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager POST:BaseURLString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
    [SVProgressHUD dismiss]; 
    if([responseObject objectForKey:@"error"]) 
    { 
     [[[UIAlertView alloc] initWithTitle:@"Data Retrieval Error" message:[responseObject description] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] show]; 
    } 
    else 
    { 
     NSString * profilePhoto = [[[responseObject objectForKey:@"result"] objectAtIndex:0] objectForKey:@"profile_picture"]; 
     NSString * status = [[[responseObject objectForKey:@"result"] objectAtIndex:0] objectForKey:@"status"]; 
     NSString * statusMsg = [[[responseObject objectForKey:@"result"] objectAtIndex:0] objectForKey:@"status_message"]; 

     if(profilePhoto && ![profilePhoto isKindOfClass:[NSNull class]]) 
      [[NSUserDefaults standardUserDefaults] setObject:profilePhoto forKey:PROFILE_PHOTO]; 
     if(status && ![status isKindOfClass:[NSNull class]]) 
      [[NSUserDefaults standardUserDefaults] setObject:status forKey:STATUS]; 
     if(statusMsg && ![statusMsg isKindOfClass:[NSNull class]]) 
      [[NSUserDefaults standardUserDefaults] setObject:statusMsg forKey:STATUS_MESSAGE]; 

    } 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
//end of getting data for status message and profile pic 
} 

지금 한번 위의 과정이다. 업로드 (BOOL) 이미지 후 {

NSString * profPic = [[NSUserDefaults standardUserDefaults] objectForKey:PROFILE_PHOTO]; 
NSLog(@"profilepic: %@", profPic); 
// NSString* status = [[NSUserDefaults standardUserDefaults] objectForKey:STATUS]; 
NSString * statusMsg = [[NSUserDefaults standardUserDefaults] objectForKey:STATUS_MESSAGE]; 
if(profPic) 
    [photo loadIconForProduct:profPic]; 

if(statusMsg) 
    statusMsgView.text = statusMsg; 

//self.view=nil; 
//[self viewDidLoad]; 
[self getFriendsList]; 
[photo setNeedsDisplay]; 
[self.view setNeedsDisplay]; 
} 

애니메이션 : (무효) viewWillAppear - : 아래의 코드는 내가 새로 고침 이미지와보기를 얻기 위해 노력 많은 것들의 마지막 처음으로 이미지를 업로드 할 때 작동하지만 사용자가 editImage 버튼을 두 번 눌러 다른 이미지를 업로드하면 작동하지 않습니다.

무엇이 잘못 되었습니까? 제가 제공 할 수있는 다른 것이 있다면 알려주십시오.

감사합니다.

+0

그냥 내 두 센트. 이미지 URL이 새로운 것으로 간주 될 수 있도록 '... image.jpg? rand = 6547'과 같은 URL 끝에 임의의 숫자를 추가하십시오. – Tamil

+0

시도해보십시오. 로그 아웃 한 후 다시 로그인하여 새 이미지를 확인하십시오. 이 문제를 해결하기 위해 다른 사람이 제안하지 않을 사항이 있습니까? – user3007683

답변

0

여기서 볼 수 있듯이 프로필 사진의 결과로 URL이 다시 표시됩니다. 따라서 AFNetworking 함수를 사용할 수도 있습니다.

Im 추정 사진은 UIImageView입니다.

[photo setImageWithURL:[NSURL URLWithString:profPic] placeholderImage:[UIImage imageNamed:@"somePlaceholderImage"]]; 
+0

좋아요, AFNetworking을 사용하여 이미지를로드 할 수 있습니다. 나는 그것을 시도 할 것이다, 그러나 나는보기에 다른 동적 데이터 (기본 레이블 텍스트)가 다시로드되지 않는 것을 알아 챘다. 뷰의 데이터가 다시로드되는지 확인하기 위해 현재 수행 중이 지 않은 작업이 있습니까? – user3007683

+0

위의 코드에서 이것은 내가 이해할 수있는 것입니다. 내가 틀렸다면 수정하십시오. 사용자가 UIButton을 클릭하고,보기 컨트롤러가 밀리고 일부 데이터가 업로드되며, 다음에 어떤 일이 발생합니까? – RJiryes

+0

2 개의보기가 사용됩니다. 버튼을 누르면 뷰 1에서 뷰 2로 사용자가 이동합니다. 뷰에서는 2 개의 이미지가 업로드됩니다. 그런 다음 사용자는 뒤로 버튼을 누르고보기 1로 돌아가고 새 이미지가 표시됩니다. 보기 1에는 사용자가 서버에 업로드되는 텍스트를 입력하는보기 2로 이동하는 btn도 있습니다. 그런 다음 사용자는 뒤로 버튼을 클릭하고 방금 업로드 한 텍스트가있는 레이블이 있어야하는 곳으로 돌아갑니다. 앱을 완전히 종료하고보기로 돌아 가면 업데이트 된 데이터가 올바르게 표시됩니다. 사용자가 뒤로 버튼을 클릭 할 때까지 업데이트 할 데이터가 필요합니다. – user3007683