【发布时间】:2013-10-19 09:46:30
【问题描述】:
以下是实体Player的头文件。
@interface Player : NSManagedObject
@property (nonatomic, retain) NSNumber * experience;
@property (nonatomic, retain) id items;
@property (nonatomic, retain) NSNumber * level;
@end
@interface items : NSValueTransformer
@end
items 本质上是带有NSNumber 元素的NSMutableArray。在一个函数中,我正在更新这个数组:
- (void)itemWasDropped:(ItemIndex)item
{ // _player has been correctly retrieved from the database
// the current number of this item
int nNum = [[_player.items objectAtIndex:item] intValue];
// to increment the number
[_player.items replaceObjectAtIndex:item withObject:[NSNumber numberWithInt:nNum + 1]];
}
这个函数被完美地调用了。我将上下文保存在 viewWillDisappear 函数中。
- (void)viewWillDisappear:(BOOL)animated
{ // _moc is an NSManagedObjectContext instance that has been correctly initialised.
// to update the database
NSError* err = nil;
BOOL bSucc = [_moc save:&err];
if (err || !bSucc)
{
...
}
}
问题是只要我不在任务栏中关闭应用程序,更新在其他视图中可见。有什么问题?有人可以帮忙吗?
【问题讨论】:
-
每个视图都使用自己的托管对象上下文吗?
-
不,上下文是一样的。每个视图都向 AppDelegate 询问上下文。如果上下文尚未初始化,则将其初始化并返回。如果有,AppDelegate 简单地返回它。
-
刚刚解决了。为了更新核心数据实体中的数组属性,必须将该数组分配给视图控制器类中的另一个
@property数组或其他任何东西,并更新@property数组。在数据库更新之前,@property数组必须被分配回实体属性。
标签: ios objective-c core-data