Objective c 在应用程序打开之前本地存储数据
我有一个本地Sqlite数据库,其中包含3个表(高级经理、经理、员工)&所有3个表都是相互关联的。我为数据创建了3个NSObject类(w.r.t表)。现在我有了一个控制器类,我在其中查询这些表并创建这些NSobject类的对象 并更新它。最后,我将这些对象添加到该类中的数组中 现在让我们假设我有3个视图控制器(VC1、VC2、VC3)。因此,当我从VC1到VC2时,我调用data controller类,从data controller类查询并获取阵列,并在我的VC2的3 tableview中显示这些数据。因此,现在我可以添加/删除新的高级经理/经理,并在VC2的不同tableview中显示它 因此,我的问题是,当我再次从VC2返回到VC1并再次返回到VC2时,我看不到添加/删除的行。因为在我的viewDidLoad中,我再次尝试从Data controller类获取数组,所以它将再次显示数据库中曾经存在的数据 注意,我有一个限制,我不想将这些添加/删除操作数据写入任何数据库。因此,每次重新启动应用程序时,我都必须显示数据库中的默认数据Objective c 在应用程序打开之前本地存储数据,objective-c,ios,ipad,Objective C,Ios,Ipad,我有一个本地Sqlite数据库,其中包含3个表(高级经理、经理、员工)&所有3个表都是相互关联的。我为数据创建了3个NSObject类(w.r.t表)。现在我有了一个控制器类,我在其中查询这些表并创建这些NSobject类的对象 并更新它。最后,我将这些对象添加到该类中的数组中 现在让我们假设我有3个视图控制器(VC1、VC2、VC3)。因此,当我从VC1到VC2时,我调用data controller类,从data controller类查询并获取阵列,并在我的VC2的3 tableview中
有人能帮我解决这个问题吗?因此,从应用程序的打开到关闭,我可以维护这些数据。如果您希望数据从一次启动到另一次启动都保持不变,您可以将其存储在一个持久的位置,一个文件、数据库、iCloud等。您是否从捆绑包中打开数据库?无法将更改保存到捆绑包中的数据库。您需要将数据库从捆绑包复制到
文档
,然后打开该数据库。如果您不想在会话之间保存数据库,请确保在应用程序首次启动时始终将数据库从捆绑包复制到文档。(通常,只有在文档
中不存在数据库时,人们才会从捆绑包复制到文档
,但听起来您似乎总是想复制它。)
要复制数据库,请执行以下操作:
NSString *databaseName = kDatabaseName; // obviously, replace this with your database filename
NSString *documentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *databaseDocumentPath = [documentsFolder stringByAppendingPathComponent:databaseName];
NSString *databaseBundlePath = [[NSBundle mainBundle] pathForResource:databaseName ofType:@""];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
if (![fileManager copyItemAtPath:databaseBundlePath
toPath:databaseDocumentPath
error:&error])
NSLog(@"Unable to copy database from '%@' to '%@': error = %@", databaseBundlePath, databaseDocumentPath, error);
一旦这样做,您就可以打开由databaseDocumentPath
指向的数据库,您只需缓存从数据库加载的数组即可。以下是您可以做的大致操作:
@implementation DataController
static NSMutableArray *managers;
//Note: not thread-safe
- (NSMutableArray*) managers {
if (!managers)
managers = loadDefaultManagers();//queries default data from sqlite db and loads array
return managers;
}
- (void) addManager:(NSDictionary*) manager {
[managers addObject:manager];
}
...
@end