2012-05-07 11 views
0

私は、正常に動作しているアプリケーションで画像を動かしています。問題は、ユーザーがそのビューに戻ったときに画像を保持したいということです。現時点では、私は、画像中心を保持するための文字列を使用しています:NSUserDefaultsを使用してイメージ座標を保存する

NSString *centre = NSStringFromCGPoint(image.center); 

私はtheCentreと呼ばれるNSUserDefault変数があります。私が使用して保存しよう

theCentre = [NSUserDefaults standardUserDefaults]; 

[theCentre setObject:centre forKey:@"centre"]; 

をログを出力すると、次のようになります。

{280, 320} 

これは素晴らしいです。 viewDidLoadでは、全く同じログを試しましたが、返されています(null)。私はそれが正しいことを保存していないことを意味します。私はここに何か根本的なものがありません。なぜなら私のアプリケーションのどこかでNSUserDefaultsを使用していて、それはうまくいきました。事前に多くの感謝。
編集:これは試してみて、援助のデバッグ:)

-(void)getBounds 
{ 
lowerBoundX = 250; 
upperBoundX = 310; 
lowerBoundY = 290; 
upperBoundY = 350; 

} 

#pragma mark - 
#pragma mark UIPanGestureRecognizer selector 

- (void) dragGesture:(UIPanGestureRecognizer *) panGesture 
{ 
[self getBounds]; 

CGPoint translation = [panGesture translationInView:self.view]; 

switch (panGesture.state) { 
    case UIGestureRecognizerStateBegan:{ 
     originalCentre = dragImage.center; 
    } 
     break; 
    case UIGestureRecognizerStateChanged:{ 
     dragImage.center = CGPointMake(dragImage.center.x + translation.x, 
             dragImage.center.y + translation.y); 

    } 
     break; 
    case UIGestureRecognizerStateEnded:{    
     if (((dragImage.center.x >= lowerBoundX) && (dragImage.center.y >= lowerBoundY) && 
      (dragImage.center.x <= upperBoundX) && (dragImage.center.y <= upperBoundY))) { 

      dragImage.center = CGPointMake(280, 320); 
      [dragImage setUserInteractionEnabled:NO]; 

      theCentre = [NSUserDefaults standardUserDefaults]; 

     NSString *centre = NSStringFromCGPoint(dragImage.center); 

      [theCentre setObject:centre forKey:@"centre"]; 

      NSLog(@"%@", [theCentre objectForKey:@"centre"]); 
      [theCentre synchronize]; 

      break; 
     } 
     [UIView animateWithDuration:0.5 
         animations:^{ 
          dragImage.center = originalCentre; 
         } 
         completion:^(BOOL finished){ 
         }]; 
    } 
     break; 
    default: 
     break; 
} 

[panGesture setTranslation:CGPointZero inView:self.view]; 
} 

-(IBAction)clear{ 
[UIImageView animateWithDuration:0.5 animations:^{ 
dragImage.center = CGPointMake(100, 200); 
}]; 

[dragImage setUserInteractionEnabled:YES]; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 

NSLog(@"%@", [theCentre objectForKey:@"centre"]); 

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragGesture:)]; 

[dragImage addGestureRecognizer:panGesture]; 

[dragImage setUserInteractionEnabled:YES]; 

} 

答えて

2

ロブ、NSUserDefaultsに保存された

データが最初にキャッシュされているために、全体のコードであり、したがって、それはNSUserDefaultsの他のインスタンスからすぐに利用できません。データは、いくつかの所定のイベント/時間間隔で定期的に保存される。しかし、あなたはこのようsynchronizeを呼び出すことにより、データの同期を強制することができます。

NSString *theCenter = NSStringFromCGPoint(image.center); 
theCenter = [NSUserDefaults standardUserDefaults]; 
[theCenter setObject:centre forKey:@"center"]; 
[theCenter synchronize]; 

・ホープ、このことができます!

乾杯、 パヴェル

+0

は、私は同期を実装しますが、何も変更していない、非常に多くの@Pawelありがとうございます。そんな意味合いもありました!私はコード全体で私の投稿を編集し、うまくいけば解決策を見つけるでしょう! –

+1

theCenterプロパティにNSUserDefaultsオブジェクトが含まれていますか? dragGesture:メソッドで作成したようですが、viewDidLoadメソッド用に作成されたものがあるかどうかはわかりません。 – Pawel

+0

私はそれを変数ではなく、プロパティとして持っています。私が間違っている場所ですか? –

関連する問題