2017-01-08 17 views
-1

自分のユーザーが自分のプロフィール(ViewController)で写真をアップロードしたり受けたりできます。つまり、写真が保存されたら、保存した直後に最新の写真でimageViewを更新します。そのためには、NSString(secondLink)を更新する必要があります。理論的には、以下のコードがうまくいくと思います。メソッドを成功させると、userpicUpdatedメソッドをトリガーします(メソッド "サーバーからの情報の再取得")。つまり、何らかの理由で、以下のuserpicUpdatedメソッドは、更新されたデータではなく、field_photo_path内の古いデータを取得するだけです。これをどうすれば解決できますか?通知がトリガーされたときにNSStringが更新されない

AppDelegate.m

#import "DIOSSession.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

     [DIOSSession setupDios]; 

    } 

ViewController.m

- (void)userpicUpdated:(NSNotification *)note {      

    } 



    - (void)viewDidLoad { 
     [super viewDidLoad]; 

     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(userpicUpdated:) 
                name:@"userpicUpdated" object:nil]; 

    } 

    - (IBAction)savePhotoButton:(id)sender { 
      [DIOSUser 
     userUpdate:userData 
     success:^(AFHTTPRequestOperation *op, id response) { /* Handle successful operation here */ 


      NSLog(@"User data updated!"); 
      self.activityInd.hidden = YES; 
      [self.activityInd stopAnimating]; 


      [DIOSUser 
       userGet:userData 
       success:^(AFHTTPRequestOperation *op, id response) { /* Handle successful operation here */ 



       [[NSNotificationCenter defaultCenter] postNotificationName:@"userpicUpdated" object:nil]; 

        NSDictionary *thisUser = userData; 
        NSLog(@"USER DATA GOTTEN %@", thisUser); 

        NSString *imageUpdate = thisUser[@"field_photo_path"][@"und"][0][@"value"]; 
        NSLog(@"IMAGE STRING %@", imageUpdate); 

       NSURL *imageUrl = [NSURL URLWithString:imageUpdate]; 
        [self.imageView setImageWithURL:imageUrl]; 
        NSLog(@"IMAGE URL %@", imageUrl); 




       } 
       failure:^(AFHTTPRequestOperation *op, NSError *err) { /* Handle operation failire here */ 

        NSLog(@"User data failed to update!"); 
       } 
       ]; 




     } 
     failure:^(AFHTTPRequestOperation *op, NSError *err) { /* Handle operation failire here */ 

      NSLog(@"User data failed to update!"); 
     } 
     ]; 

     } 
+1

サーバーからユーザーデータを再フェッチするコードはどこですか?ここのコードは、以前に取得した辞書を参照するように見えます。 – Paulw11

+0

あなたが言っていることは、ネットワーク操作の後に変更された値を 'user [@" field_photo_path "] [@" und "[0] [@" safe_value "]'それが何であるかを見ずに助けて、それを変更しようとするいくつかのコードを見ていますか? – danh

+0

@ Paulw11ユーザーデータは、アプリケーション起動時(DIOSSession)にAppDelegateで取得されます。上記の編集を参照してください。 – Brittany

答えて

1

Looking at the source code on GithubDIOSUser userUpdate:したがって、あなたがアップデートでDIOSUser userGet:に電話をかける必要があるだろう、ユーザー情報を再ロードしません成功。 userGet:が成功したら、返されたユーザーデータを保存し、NSNotificationCenterに発砲してUIImageを更新することができます。成功した場合にUIImageを更新


、あなたはNSNotificationCenterを使用する必要はありません。また、クラッシュを避けるためにimageViewがまだアクセス可能かどうか(iOSがメモリから解放しているかどうか)をチェックする価値があります。

あなたが最初に [[DIOSSession sharedSession] user]を設定しているか、どこが最初 userDataを設定している
- (IBAction)savePhotoButton:(id)sender { 
    [DIOSUser userUpdate:userData 
       success:^(AFHTTPRequestOperation *op, id response) { 
         NSLog(@"User data updated!"); 
         self.activityInd.hidden = YES; 
         [self.activityInd stopAnimating]; 

         [DIOSUser userGet:userData 
           success:^(AFHTTPRequestOperation *op, id response) { 
            [[DIOSSession sharedSession] user] = userData; 
            NSLog(@"USER DATA GOTTEN %@", userData); 

            NSString *imageUpdate = userData[@"field_photo_path"][@"und"][0][@"value"]; 
            NSLog(@"IMAGE STRING %@", imageUpdate); 

            NSURL *imageUrl = [NSURL URLWithString:imageUpdate]; 
            [self.imageView setImageWithURL:imageUrl]; 
            NSLog(@"IMAGE URL %@", imageUrl); 
           } 
           failure:^(AFHTTPRequestOperation *op, NSError *err) { 
            NSLog(@"User data failed to update!"); 
           }]; 
        } 
        failure:^(AFHTTPRequestOperation *op, NSError *err) { 
         NSLog(@"User data failed to update!"); 
        }]; 

} 

。あなたはそのコードを表示できますか?

ソースコードから、userDataが自動的にuserGet:に更新されていることがわかりません。私はuserDataresponseに返されたデータに設定する必要があると思っていたでしょう。 NSLog(@"Response %@", response);を実行して、現在のuserDataと一致するかどうか確認できますか?

+0

Ahhhは理にかなっています。さて、編集を参照してください。今私はNSNotificationメソッドに何を入れなければならないのか分かりません。例えば。イメージ文字列を更新すると、更新された値が返されます...しかし、私が画面を変更して戻ったとき、イメージは古い値に戻ります。私はuserGetの成功を更新します - 何が欠けていますか? – Brittany

+0

@Brittany私はDrupalやSDKを使ったことが一度もなかったので、ソースをすばやく調べることができます。あなたの編集に基づいて 'UIViewController'は' [DIOSSession sharedSession] user 'に格納された値からアクティブになったときに 'UIImage'を設定するように見えますが、' sharedSession'の 'user'には古いデータが含まれています応答はローカルでのみ使用されています。代わりに 'thisUser'のローカル宣言の代わりに' sharedSession' 'user'に設定された私の編集された答えを見てください。 –

関連する問題