標準のビュー コントローラーから UIDatePicker を使用して NSDate オブジェクトを設定するアプリケーションを構築しています。日付は、別のクラスの変更可能な辞書に追加されます。その同じクラスが日付オブジェクトにアクセスしようとすると、すべての割り当てが解除され、クラッシュが発生します。さらに、これは Xcode 5 でコンパイルしてからのみ問題になりました。
サンプルコード
@interface SomeViewController ()
@property (nonatomic, strong) UIDatePicker *datePicker;
@property (nonatomic, strong) ChangeTracker *changeTracker; // Records local changes made to managed objects to send to server
@end
@implementation SomeViewController
// Relevant implementation
- (void)touchSetPicker:(UIButton *)sender
{
[self setDate:self.datePicker.date forManagedObject:self.someManagedObject];
}
- (void)setDate:(NSDate *)date forManagedObject:(NSManagedObject *)managedObject
{
// Set properties on managed object based on date param
// Pass date to changeTracker class
[self.changeTracker setDate:date forManagedObject:managedObject];
}
@end
ChangeTracker.m
@interface ChangeTracker ()
@property (nonatomic, strong) NSMutableDictionary *dateChanges;
@end
@implementation ChangeTracker
- (void)setDate:(NSDate *)date forManagedObject:(NSManagedObject *)managedObject
{
NSString *idProperty = managedObject.idProperty;
self.dateChanges[idProperty] = date;
}
- (void)compileAllChanges
{
for (NSString *idProperty in [self.dateChanges allKeys]) {
// Here is where the crash occurs due to the date being deallocated
NSDate *date = self.dateChanges[idProperty];
}
}
@end
ゾンビ オブジェクトを有効にすると、次のエラー メッセージが表示されます: -[__NSDate release]: message sent to deallocated instance
プロジェクトは ARC を使用しているため、このオブジェクトを明示的に保持しようとすることはできません。どんな助けでも大歓迎です。