我是Objective-C的新程序员。我创建了一个Android应用程序,并且我已经集成了SQLite。我想在iOS中构建相同的应用程序。在Android for SQLite操作中,我创建了一个从Content Provider扩展的类:
public class MyCProvider extends ContentProvider {
...
...
}
我也覆盖了这种方法: boolean onCreate()方法:
@Override
public boolean onCreate() {
dbHelper = new MySQLiteOpenHelper(getContext(), MySQLiteOpenHelper.DATABASE_NAME, null, MySQLiteOpenHelper.DATABASE_VERSION);
return dbHelper != null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
...
}
@Override
public String getType(Uri uri) {
...
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
String nullColumnHack = null;
long id = -1;
Uri contentURI = null;
switch (uriMatcher.match(uri)) {
case GROUP_ALL_ROWS:
contentURI = GROUP_CONTENT_URI;
id = db.insert(USEFUL_NUMBER_GROUP_TABLE_NAME, nullColumnHack, values);
break;
...
...
}
我想知道Objective-C中的这种方法等价。 有什么想法吗?
答案 0 :(得分:3)
SQLite直接与iOS一起提供,您只需使用其native C API。 Apple没有提供任何包装。
态度似乎是你可以直接使用SQLite,或者你可以使用Core Data,这实际上是一个非常不同的东西 - 它是一个可查询的对象图,它隐含地依赖于一个不透明的存储方法,它可以是一个基于SQLite的关系数据库,如果你喜欢,但核心数据显然不是关系数据库。您可以而且应该针对下面的SQL存储进行优化,如果这是您选择的存储,但数据库本身具有私有模式,并且不会直接查询。
因此,没有等同于SQLiteOpenHelper
。如果你想使用SQLite,那么你需要为自己做开放,创建,迁移等工作。
iOS也没有等同于ContentProvider
,因为这是一个允许在应用程序之间共享数据的形式化模型结构,但iOS在这种意义上并不真正在应用程序之间共享数据。来自同一开发人员的应用程序可以共享磁盘存储,所有应用程序可以通过URL架构等相互打开,但是您无法编写不同应用程序可以与之交互的代码。因此,您只需构建您认为最合适的任何类型的模型对象,其生命周期和界面将是您明确决定的任何内容。