2014-06-26 59 views
1

我是Objective-C中的一名新程序員。我創建了一個Android應用程序,並且我已經集成了SQLite。我想在iOS中構建相同的應用程序。在Android的SQLite的操作我創建了從內容提供商擴展類:iOS SQLite與Android SQLite等價

public class MyCProvider extends ContentProvider { 
... 
... 
} 

我也overrided這個方法: 布爾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中知道這種方法的等價性。 對此有何想法?

回答

3

SQLite直接與iOS一起提供,您只需使用其native C API即可。 Apple不提供任何形式的包裝。

態度似乎是你可以直接使用SQLite,或者你可以使用核心數據,這實際上是完全不同的東西 - 它是一個可查詢的對象圖,它隱含地依賴於一個不透明的存儲方法,該存儲方法可以是基於SQLite的關係數據庫如果你喜歡,但核心數據顯然不是關係型數據庫。如果這是您選擇的存儲,但是數據庫本身具有私有模式並且不會直接查詢,那麼您可以並應該優化下面的SQL存儲。

因此,沒有相當於SQLiteOpenHelper。如果你想使用SQLite,那麼你需要爲自己打開,創建,遷移等工作。

iOS也沒有等效於ContentProvider,因爲這是一個形式化的模型結構,允許在應用程序之間共享數據,但iOS在這種意義上並不真正在應用程序之間共享數據。來自同一開發人員的應用程序可以共享磁盤存儲,所有應用程序可以通過URL架構等互相打開,但不能編寫不同應用程序都可以交互的代碼。因此,您只需構建您認爲最合適的任何類型的模型對象,並且其生命週期和界面將成爲您明確決定的任何內容。