【问题标题】:sqlite database wrapper for objective c object目标 c 对象的 sqlite 数据库包装器
【发布时间】:2012-03-05 15:24:03
【问题描述】:

我已经开发了一个应用程序,并在我的基于选项卡的应用程序中使用了 sq-lite 数据库包装器(BWDB - Bill W 的包装器.....),当我使用此代码在我的第一个视图控制器上创建数据库对象时

- (DBAccess *) loadDBAccessDatabase {
    // NSLog(@"%s", __FUNCTION__);
    if (!_dbObject) {

        NSString * _dbFileName = @"turfnutritiontool_ver_one.db";
        _dbObject = [[DBAccess alloc] initWithSSDBAccessFilename:_dbFileName];
    }
    // Check Point
    [TestFlight passCheckpoint:@"LOAD_DATABASE"];
    return _dbObject;
}

它在这个视图控制器中对我有用,但是如果我在第二个视图控制器加载时创建一个新对象,那么新的 db 对象可以正常获取数据,但我无法插入或更新数据库,它说 db 已锁定所以告诉我如何在所有应用程序中只管理一个 db 对象并发送到其他视图控制器以使其正常工作,

【问题讨论】:

    标签: objective-c sqlite ios4


    【解决方案1】:

    所以您正在创建包含此代码的类的两个对象?如果是这样,最简单的方法可能是使_dbObject 成员静态,如

    static DBAccess *_dbObject;
    

    更进一步,您可以考虑为数据库基础引用创建一个单例。 Apple 在Mac OS X Developer Library 中提供了有关 Cocoa 单例的介绍。

    【讨论】:

    • 非常感谢!还有一件事,我读了一篇关于单例类iphone.galloway.me.uk/iphone-sdktutorials/singleton-classes 的教程,但我不明白应该在包装类中使用该单例方法吗?
    • 使用单例,您将创建另一个类(在这种情况下,基本上是一个围绕 DBAccess 指针的包装器)。在您链接到的示例中,someProperty 可能是_dbObject。然后,您可以在需要访问数据库的任何地方使用这个类。如果您有不同的类访问数据库(而不是一个类的多个对象),这很有用。你有单例,控制器可以来去去去,而不需要进一步考虑数据库初始化。另一方面,如果你所有的视图控制器都是同一个类的实例,一个静态变量可能就足够了。
    猜你喜欢
    • 2023-03-21
    • 2011-10-22
    • 2012-02-20
    • 2012-11-12
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多