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