2012-05-07 40 views
0

我在我的應用程序中移動圖像,這是正常工作。問題是,當用戶回到該視圖時,我想保留這些圖像。目前,我使用的是字符串來保存圖像中心:使用NSUserDefaults來存儲圖像座標

NSString *centre = NSStringFromCGPoint(image.center); 

我有一個NSUserDefault變量稱爲theCentre:

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

我只將它作爲一個變量,而不是一個屬性;我錯了嗎? –