آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

استفاده از دیتابیس خارجی از نوع sqlite که توسط خود برنامه دانلود میشه

hamidptb  8 سال پیش  8 سال پیش
0 0

با سلام خدمت همه ی دوستان عزیز 

اون چیزی که مد نظرم هست و میخوام داخل برنامم پیاده سازی کنم این هست که کاربر بتونه دیتابیس خارجی از نوع sqlite رو که روی سرور بارگذاری شده دانلود کنه و از دیتا های درون اون داخل برنامه استفاده کنه 

توی آموزشی که استاد کاشی زاده راجب استفاده از دیتابیس خارجی داده ، در یکی از مراحل میومدیم از قسمت Build phases و بعد از اون روی New copy files phase کلیک میکردیم و دیتابیس خارجی خودمون رو به برنامه معرفی میکردیم تا موقع نصب همراه با برنامه داخل گوشی ثبت بشه . حالا با توجه به این موضوع انجام این مرحله برای دیتابیس دانلودی ممکن نیست در نتیجه نمیتونیم از دیتابیس دانلودی با این روش استفاده کنیم ، حالا سوال من از آقای کاشی زاده و دوستان عزیز دیگه اینه که آیا راهی برای استفاده از دیتابیس دانلودی درون برنامه وجود داره ؟

 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
hamidptb  8 سال پیش
0 0

 پاسخ صحیح

خوشبختانه مشکل برطرف شد .

کد ها رو میزارم تا اگه دوستان دیگه به این مشکل برخوردن بتونن از این کد ها استفاده کنند . خروجی قطعه کد های زیر به این صورت هست که فایل دیتابیس از نوع sqlite رو از سرور دانلود میکنه و اطلاعات داخل دیتابیس رو درون کنسول پیرینت میکنه .

امکان انجام چنین کاری با تغییرات جزیی در متد copyDBFromBundle داخل کلاس sqliteDB که آقای کاشی زاده در آموزش ها قرار داده میسر هستش . البته متد رو تغییر ندادم فقط کد های داخل اون رو به صورت دیگه ای در داخل ViewController اصلی تغییر دادم و استفاده کردم . 

کد های کلاس AppDelegate ( البته فقط کد های داخل متد didFinishLaunchingWithOptions رو میزارم چون بقیش تفاوتی با کلاس اصلی نداره و همچنین یک متغییر استاتیک هم باید درون این کلاس تعریف شه که به صورت زیر میشه :

 import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

internal static var downloadPath = ""


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

let documentpath:NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

print(documentpath)

AppDelegate.downloadPath = documentpath.stringByAppendingPathComponent("download")

if !NSFileManager.defaultManager().fileExistsAtPath(AppDelegate.downloadPath) {
do {

try NSFileManager.defaultManager().createDirectoryAtPath(AppDelegate.downloadPath, withIntermediateDirectories: false, attributes: nil)

} catch let error as NSError {

print(error.localizedDescription)

}
}

return true
}

کد های مربوط به کلاس ViewController :

 import UIKit

class ViewController: UIViewController , NSURLSessionDelegate , NSURLSessionDownloadDelegate {

override func viewDidLoad() {
super.viewDidLoad()

let sessionConf = NSURLSessionConfiguration.defaultSessionConfiguration()

let session = NSURLSession(configuration: sessionConf, delegate: self, delegateQueue: nil)

let url = NSURL(string: "http://basketlife.ir/driveTest.sqlite")

let request = NSURLRequest(URL: url!)

let downloadTask = session.downloadTaskWithRequest(request)

downloadTask.resume()

}

internal func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {

let fileManager = NSFileManager.defaultManager()

let content = NSData(contentsOfURL: location)

fileManager.createFileAtPath(AppDelegate.downloadPath + "/" + "test.sqlite", contents: content, attributes: nil)

let db = DB.getInstance()

let bundlePath = AppDelegate.downloadPath + "/" + "test.sqlite"

let destPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]

let fileManager2 = NSFileManager.defaultManager()

let fullDestPath = NSURL(fileURLWithPath: destPath).URLByAppendingPathComponent("db.sqlite")

let fullDestPathString = fullDestPath.path

do {

if !fileManager2.fileExistsAtPath(fullDestPathString!) {

try fileManager2.copyItemAtPath(bundlePath, toPath: fullDestPathString!)

}

} catch {

print(error)

}


let records = db.executeQuery("SELECT * FROM exam3")

for record in records {

print(record.column["question"]?.asString())

}

}

}

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .