2012-01-09 5 views
8

मैं अपने आईओएस प्रोजेक्ट में एफटीएस का उपयोग करना चाहता हूं। SO पर प्रश्नों के कुछ उत्तरों के माध्यम से (जैसे this) और अन्य स्रोत (जैसे this), मुझे समझ में आया कि मुझे आईओएस पर अपना स्वयं का एसक्लाइट 3 बनाना होगा, इस प्रकार निर्भरता को डिफ़ॉल्ट libsqlite3.dylib पर बदलना होगा।क्या अब सेब ने मानक/अंतर्निहित स्क्लाइट लाइब्रेरी में एफटीएस सक्षम किया है?

लेकिन जब मैं सीधे (, एक नई परियोजना में सिर्फ मानक जुड़ा हुआ 'libsqlite3.dylib' और कोई कस्टम SQLite निर्माण के साथ) क्वेरी चलाएँ:

"SELECT rowid FROM pages WHERE textcontent MATCH 'jim';" 

का उपयोग करके निर्मित तालिका 'पृष्ठ' पर क्वेरी:

"CREATE VIRTUAL TABLE pages USING fts3(textcontent TEXT)", 

मैं किसी भी त्रुटि मिल न, बजाय, मैं (पंक्तियों की rowid जिसमें शब्द 'जिम' मौजूद है) सही परिणाम प्राप्त के रूप में अगर FTS में defalt रूप से सक्षम है में निर्मित आईओएस एसक्लाइट लाइब्रेरी।

तो, क्या यह मामला है? क्या अब सेब ने मानक/अंतर्निहित स्क्लाइट लाइब्रेरी में एफटीएस सक्षम किया है? या ऐसा कुछ है जो मैं यहाँ याद कर रहा हूँ?

धन्यवाद।

पीएस। मैं अपनी परियोजना में एक एसक्लाइट रैपर के रूप में एफएमडीबी का उपयोग कर रहा हूं और यहां वह कोड है जिसका उपयोग मैं उपर्युक्त परीक्षण करने के लिए करता हूं।

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ,  NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *dbDocumentsPath = [documentsDir stringByAppendingPathComponent:@"1.db"]; 

FMDatabase *db = [FMDatabase databaseWithPath:dbDocumentsPath]; 

if (![db open]) 
    NSLog(@"Could not open db."); 

if([db executeUpdate:@"CREATE VIRTUAL TABLE pages USING fts3(textcontent TEXT)"]) 
    NSLog(@"Virtual Table Created"); 

if([db executeUpdate:@"INSERT INTO pages(textcontent) VALUES ('Jack')"]) 
    NSLog(@"First Insert Done"); 
if([db executeUpdate:@"INSERT INTO pages(textcontent) VALUES ('jim is jam')"]) 
    NSLog(@"Second Insert Done"); 

FMResultSet* resultSet1 = [db executeQuery:@"SELECT rowid FROM pages WHERE textcontent MATCH 'jim';"]; 

while([resultSet1 next]) 
    NSLog(@"%@",[resultSet1 objectForColumnName:@"rowid"]); 
+1

ठीक है, जैसा कि मैंने कहा था, मुझे एप्पल-संकलित libsqlite3.dylib पर FTS प्रश्नों का प्रयास करते समय कोई त्रुटि नहीं मिली, लेकिन जब मैं इसे अपने आप से बदलता हूं कम्प्यूटरीकृत स्क्वाइट लाइब्रेरी को एफटीएस मैन्युअल रूप से अक्षम किया गया है (मैक्रो # को SQL_E_QABLE_FTS3 को sqlite.c से हटाकर), मुझे फॉलोइंग त्रुटि मिलती है "sqlite3_step (1: ऐसा कोई मॉड्यूल नहीं: fts3) SQLITE_ERROR को कॉल करने में त्रुटि"। और जब मैं फिर से sqlite.c से macro #define SQLITE_ENABLE_FTS3 जोड़कर एफटीएस को मैन्युअल रूप से सक्षम करता हूं, तो त्रुटि गायब हो जाती है और मुझे वांछित आउटपुट मिलता है। इससे मुझे विश्वास है कि सेब ने डिफ़ॉल्ट रूप से एफटीएस को सक्षम किया है। धन्यवाद। – archeopetrix

+0

आईओएस का कौन सा संस्करण आप उपयोग कर रहे हैं? – SK9

+0

मैं आईओएस 5 का उपयोग कर रहा हूं। – archeopetrix

उत्तर

1

मैं अपने मशीन और शेर ओएस पर इस परीक्षण किया है और यह पूरी तरह से काम किया है, फिर भी निर्माण किसी अन्य मशीन (सभी प्रश्नों FTS को छोड़कर काम करेगा) पर FTS पर अमल नहीं होता। तेंदुए ओएस के साथ निर्मित एक ही परियोजना का परिणाम उपयोग करने योग्य एफटीएस नहीं होगा।
लेकिन परियोजना में समामेलन स्रोत (और एफटीएस सक्षम करने) के परिणामस्वरूप किसी भी मशीन पर निर्माण और चलने का समापन होता है।

2

This guy अपने दूसरे ब्लॉग अपडेट में जोर देकर अपने निष्कर्षों की पुष्टि करता है कि एफटीएस 3 आईओएस 5 की SQLite लाइब्रेरी में शामिल है। (मैंने इसका परीक्षण भी किया है और उसी निष्कर्ष पर आया है।)

संबंधित मुद्दे