Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 使用核心数据存储用户对象_Core Data_Stay Logged In - Fatal编程技术网

Core data 使用核心数据存储用户对象

Core data 使用核心数据存储用户对象,core-data,stay-logged-in,Core Data,Stay Logged In,我有一个问题:我经常遇到这样的情况,我有一些书上说的对象和一个用户列表。每个用户都有一些书。还有一种特殊情况是,当前登录的用户比普通用户拥有更多的属性,如发布权限、收藏夹等 在以前的所有项目中,我一直在创建一个名为CurrentUser的User子类,并在其中添加了CurrentUser属性/逻辑,例如,普通用户无法注销。但我总是遇到确保只有一个CurrentUser对象存在的问题 其他人是怎么做到的?我这样做对吗?我不太确定我是否理解了你的问题,但如果你想控制CurrentUser只有一个实例

我有一个问题:我经常遇到这样的情况,我有一些书上说的对象和一个用户列表。每个用户都有一些书。还有一种特殊情况是,当前登录的用户比普通用户拥有更多的属性,如发布权限、收藏夹等

在以前的所有项目中,我一直在创建一个名为CurrentUser的User子类,并在其中添加了CurrentUser属性/逻辑,例如,普通用户无法注销。但我总是遇到确保只有一个CurrentUser对象存在的问题


其他人是怎么做到的?我这样做对吗?

我不太确定我是否理解了你的问题,但如果你想控制CurrentUser只有一个实例,我将设置一种单例类,比如SessionController,它的属性类型为CurrentUser

因此,您可以在任何地方访问该属性,并且您知道该属性仅可用于该类的一个实例,因此当前用户只有一个属性

CurrentUser* cu = [[SessionController sharedSessionController] currentUser];
if(!cu) // allowed
else // not allowed
当您登录或执行其他操作时,您将填充该属性。当您注销时,您将其设置为零。当您希望与其他用户一起输入时,可以检查该属性。这是一种在大多数情况下都能奏效的简单方法

关于你的问题,我不太清楚你为什么要将用户实体子类化。但也许有一些动机。在处理子类时要注意。事实上,如果使用sqlite存储,核心数据会使您创建的子类变得平坦。因此,在本例中,您只有一个用户表,其中包含您在CurrentUser中创建的属性

编辑

阅读问题的标题,如果必须使用db文件进行控制,我将创建一个名为LoggedUser的实体,并避免使用子类

您可以在此处存储当前用户的id以及所需的其他属性

然后,如果要验证是否有一个用户已经登录,只需设置如下请求:

NSInteger count = [fetchRequest countForFetchRequest:&error]; // query against `LoggedUser`
if(count >= 1) // not allowed
else // allowed

好的,我将使用您编辑中提出的解决方案。我还注意到了子类化问题。有人知道CoreData使用平面数据库还是这种多表数据库更高效吗?我知道在安卓系统上,为了提高速度,我总是追求扁平化的数据库……这要看情况而定。如果使用多表dbs,则需要在从不同的表检索数据方面做更多的工作。相反,当你使用平板电脑时,你的内存中可能会有一些对你的应用程序不有用的属性。标记为答案和/或更新(如果需要)。干杯