2016-02-11 29 views
2

背景:
我对Swift非常非常新,但也是一般的编程,所以提前道歉。我唯一真正的数据库经验是MySql,即使这样也不是那么热。主键在Swift中的新对象

我通过构建基本目标/习惯跟踪应用学习Swift + Realm。

任务:
我有一个目标对象,其包括称为“id”主键。目标可能是“减肥”。我还有一个Streak对象,其中包括7个每日“签到”。用户设定一个目标,并每天签到。

每个目标可以有多个“条纹”,例如经过7天的短跑/连胜后,用户可以开始另一场比赛。你也可以有多个目标。为了实现这一点,我试图复制一个自动递增的目标ID的功能,这也是一个主键。这也会记录在相应的条纹中。

我的问题:
我遇到的问题是,当我试图存储另一个目标,我得到一个错误:

*** Terminating app due to uncaught exception 'RLMException', reason: 'Primary key can't be changed after an object is inserted.' 

这是我AddGoalController代码。我添加了评论来解释我的想法。实际上,即使我评论按钮中的所有内容,并且只有getNextID(),我仍然会得到相同的错误。

我的问题是:

1.是否有一个更优雅的方式来实现我具有连接多个条纹目标或目标的目的。只有最新的连胜活跃。
2.是什么导致这个错误?


提前

回答

3

newID非常感谢不应该是一个实例变量,它应该从你的函数返回。

您还需要将newID = goal!.id++更改为newID = (goal!.id + 1),以便您不编辑该值,您需要获取该值并将其添加到结果中,而不是添加一个值,然后获取该值。