在顯示滑塊的值的標籤旁邊,我想顯示與開始日期對應的日期+滑塊值單位中的天數。NSDate基本使用錯誤
當我移動滑塊時,應用程序在模擬器中崩潰。據我可以發現,當我嘗試創建一個新的NSDate字段和我的startDate對象「超出範圍」時,會發生這種情況。
閱讀了很多關於保留和發佈NSDate文檔的內容,直到現在還沒有幫助我,因爲文檔太抽象了,以至於在我看來,我無法在文檔中找到相關部分。我希望通過示例來了解更多。
那麼,下面的代碼有什麼問題(以及初學者在文檔中從哪裏學到的)?
#import <UIKit/UIKit.h>
@interface SliderDateViewController : UIViewController {
UILabel *dateLabel;
UILabel *sliderValueLabel;
UISlider *slider;
NSDate *startDate;
}
@property (nonatomic, retain) IBOutlet UILabel *dateLabel;
@property (nonatomic, retain) IBOutlet UILabel *sliderValueLabel;
@property (nonatomic, retain) IBOutlet UISlider *slider;
@property (nonatomic, retain) NSDate *startDate;
-(IBAction)sliderValueChanged:(UISlider *)theSlider;
@end
#import "SliderDateViewController.h"
@implementation SliderDateViewController
@synthesize dateLabel;
@synthesize sliderValueLabel;
@synthesize slider;
@synthesize startDate;
- (void)viewDidLoad {
[super viewDidLoad];
dateLabel.text = @"01.01.2010";
sliderValueLabel.text = @"0";
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"dd.MM.yyyy"];
self.startDate = [inputFormatter dateFromString:dateLabel.text];
NSLog(@"startDate: ", self.startDate.description);
[inputFormatter release];
}
-(IBAction)sliderValueChanged:(UISlider *)theSlider {
int sliderValueAsInt = (int)(theSlider.value + 0.5f);
NSString *newText = [[NSString alloc] initWithFormat:@"%d", sliderValueAsInt];
sliderValueLabel.text = newText;
[newText release];
// Next line following the comment crashed with
// *** -[CFDate release]: message sent to deallocated instance 0x3b07d10
NSDate *newDate = [startDate addTimeInterval:86400 * sliderValueAsInt];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"dd.MM.yyyy"];
dateLabel.text = [outputFormatter stringFromDate:newDate];
[outputFormatter release];
// [newDate release] // <- this was the error
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
[dateLabel release];
[sliderValueLabel release];
[slider release];
[startDate release];
[super dealloc];
}
@end
我使用iPhone OS 3.1庫。沒有-dateByAddingTimeInterval: – 2010-02-17 17:17:24
@Frank:哎呀,對不起。閱讀Mac OS X 10.6文檔集。 – kennytm 2010-02-17 17:20:21
模擬器現在不會崩潰(Yippee!),但是在標籤中日期很快。當滑塊變爲零時,它們不會降低到初始值。 – 2010-02-17 17:24:18