آموزش iOS پیشرفته در توسعه iOS با Swift 2

3 سال پیش
آموزش iOS پیشرفته در توسعه iOS با Swift 2

آموزش iOS پیشرفته در توسعه iOS با Swift 2

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش iOS پیشرفته در توسعه iOS با Swift 2 خواهیم پرداخت.

در این درس، ما برخی از ویژگی های پیشرفته مانند ایجاد چندین نمایش در برنامه خود، افزودن نوارهای ناوبری، افزودن نماهای جدول، ذخیره داده ها در برنامه، ساخت برنامه های وب و غیره را پوشش خواهیم داد.

لطفاً هر بخش را با دقت مرور کنید، زیرا این درس حاوی بیشتر مواردی است که ما در هنگام توسعه برنامه ها به آنها نیاز داریم.

کنترل کننده نمایش چندگانه

در برنامه های قبلی خود ما فقط یک view / view controller تنها می دادیم. با این حال، ما می توانیم چندین نمایش در برنامه خود داشته باشیم و می توانیم بر روی هر یک از آنها به طور مستقل عمل کنیم.

بنابراین، ما با ایجاد یک پروژه جدید شروع خواهیم کرد. نام این پروژه چندین نمایش دارد. مانند هر پروژه دیگر، این پروژه همچنین دارای یک View Controller و یک پرونده Swift برای آن کنترل کننده است. (این را می توانید با انتخاب view و دیدن خصوصیات آن در Identity Inspector مشاهده کنید.)

در سمت راست (Identity inspector) می توان کلاسی را مشاهده کرد که مربوط به کنترل کننده نمایش ما است. این پیکان در سمت چپ، نقطه ورود است. این اولین view برنامه ما است که پس از شروع برنامه نشان داده می شود.

افزودن کنترل کننده نمایش چندگانه دوم

برای افزودن سایر کنترل کننده های مشاهده به برنامه خود، ما کنترلر view را در کتابخانه اشیا خود جستجو خواهیم کرد. پس از یافتن آن، کنترلر view را به قسمت  main.stroryboard خود، درست خارج از view های دیگر، می کشیم.

برنامه شما باید به این شکل باشد. اکنون، ما یک کنترل کننده view اضافه کرده ایم، اما اکنون نیز باید یک کلاس کنترل کننده view برای view تازه اضافه شده خود ایجاد کنیم.

روی پروژه خود راست کلیک کنید → new File → cocoa Touch Class هر چیزی را که می خواهید برای آن نامگذاری کنید ، ما نام آن را “SecondViewController” می گذاریم.

به این ترتیب که شما یک کلاس کلاس برای view controller خود ایجاد می کنید. اکنون ، به “main.storyboard” خود برگردید ، روی دومین کنترل کننده view کلیک کنید و Identity Inspector آن را ببینید.

قسمت کلاس باید در حال حاضر خالی باشد ، بنابراین روی آن قسمت کلیک کرده و نام کلاس خود را که در مرحله آخر اضافه کرده اید تایپ کنید. اگر ظاهر شد، بر روی enter کلیک کنید.

اکنون ما یک کنترل کننده view چندگانه ایجاد کرده ایم و فایل کلاس کنترلر را برای آن View اضافه کرده ایم. با این حال ، اگر برنامه را اجرا کنید ، نمای دوم شما هنوز نشان داده نمی شود. چرا؟

زیرا ما تابعی اضافه نکرده ایم ، که ما را به آن منظره می برد. به طور خلاصه ، ما هنوز Navigation را به برنامه خود اضافه نکرده ایم. نگران نباش؛ ما در بخش زیر به آن خواهیم پرداخت.

افزودن پیمایش به برنامه

فرآیند انتقال از یک view به view دیگر Segueing نامیده می شود ، یعنی با ایجاد segue بین دو دیدگاه انجام می شود. برای این کار ، یک دکمه در کنترل کننده view اول اضافه کرده و کشیدن را از آن به کنترل کننده view دوم انجام دهید. هنگامی که دکمه را رها می کنید.

افزودن پیمایش به برنامه
گزینه Show را از Action Segue انتخاب کنید. اکنون برنامه خود را اجرا کنید ، می بینید که با کلیک یک دکمه ، نمای دوم ظاهر می شود (برای اینکه با وضوح بیشتری چیزی را در نمای دوم خود اضافه کنید ، بنابراین می توانید شناسایی کنید).

با این حال، اکنون نمی توانید به view اول خود برگردید. برای آن، ما کنترلرهای ناوبری داریم.

افزودن کنترل کننده پیمایش

اولین کنترل کننده view خود را انتخاب کنید و در نوار بالا ، روی Editor → Embed in → Navigation controller کلیک کنید.

اکنون هنگامی که برنامه را اجرا می کنیم، می بینیم که یک نوار پیمایش در بالای view وجود دارد. وقتی روی دکمه کلیک می کنیم ، به view دوم می رویم ، جایی که یک دکمه برگشت را در آن نوار ناوبری مشاهده خواهیم کرد. روی این کلیک کنید و ما به view اولیه باز خواهیم گشت.

افزودن دکمه عنوان و برگشت به نوار پیمایش

برای افزودن عنوان به نوار پیمایش خود، روی نوار پیمایش کلیک کنید و بازرس ویژگی آن را ببینید. آنجا خواهیم دید –

  • Title – این عنوان نوار پیمایش است که در مرکز ظاهر می شود.
  • Prompt – این در بالای نوار عنوان ، در مرکز ظاهر می شود.
  • Back Button– در اینجا می توانید متنی را که در دکمه برگشت ظاهر می شود اصلاح کنید.

در حال حاضر دکمه عبور از view در نمای ما قرار دارد که اگر بخواهیم مورد دیگری روی صفحه نمایش ظاهر شود، مناسب نیست. بنابراین ، ما یک آیتم Bar Button را در نوار پیمایش اضافه خواهیم کرد ، که ما را به view دوم می رساند. با این حال، برای این منظور ابتدا باید آخرین دکمه اضافه شده را حذف کنیم.

افزودن Bar Button

آیتم Bar Button را در کتابخانه شی جستجو کنید و آن را به سمت راست نوار پیمایش بکشید. نام آن را به صورت “Next>” بگذارید ، کشیدن را از آن به view دوم کنترل کنید ، نمایش را انتخاب کنید همانطور که با آخرین دکمه اضافه شده کار کردیم.

حالا برنامه را اجرا کنید، تمیزتر و بهتر به نظر می رسد. این تمام کاری است که هم اکنون با پیمایش انجام خواهیم داد.

 

نماهای جدول

یک جدول داده ها را به صورت یک لیست ستونی حاوی چندین ردیف ارائه می دهد که می توان آنها را به بخشهایی تقسیم کرد. برای ارائه داده ها به روشی تمیز و کارآمد باید از جداول استفاده شود.

در این بخش، نحوه افزودن نماهای جدول، افزودن سلولهای نمونه اولیه، افزودن منبع داده و نمایندگان برای نمای جدول ، تغییر خصوصیات جدول و تنظیم داده های پویا برای سلولهای نمای جدول ، خواهیم فهمید.

برای افزودن نمای جدول، ابتدا یک پروژه جدید ایجاد می کنیم و نام آن را می گذاریم – “tableView”. سپس، به کتابخانه شی بروید و جدول مشاهده را جستجو کنید ، ما نمای جدول ، کنترل کننده جدول را می بینیم و بسیاری از گزینه های دیگر. با این حال ، باید نمای جدول را انتخاب کرده ، آن را بکشید و به نمای کنترل کننده پیش فرض اضافه کنیم.

شناسه تغییر سلول

اکنون ، در نمای خود ، روی سلول نمونه اولیه خود کلیک کنید (که کمی دشوار است). بنابراین، در رئوس مطالب سند خود ، روی View controller → View → Table View → Table View Cell کلیک کنید ، و اکنون در بازرس ویژگی آن ستونی به نام Identifier وجود دارد ، روی آن کلیک کنید و نام آن را “Cell” بگذارید.

افزودن منبع و Delegate

برای ایجاد پویا بودن نماهای جدول خود ، به آنها نیاز داریم تا داده های پویا را بارگیری کنند. بنابراین ، برای آن به یک Delegate و یک منبع داده نیاز داریم. برای ایجاد نمایندگی و منبع داده در جدول خود ، کشیدن را از نمای جدول به کنترل کننده نمای خود یا دکمه زرد در بالای کنترل کننده نمایش کنترل کنید همانطور که در تصویر زیر نشان داده شده است.

هنگامی که مکان نما را آزاد می کنیم، دو گزینه در آنجا خواهیم دید، dataSource و Delegate ، یکی یکی آنها را انتخاب کنید (وقتی هر یک را انتخاب می کنید ، پنجره بازشو پنهان می شود ، برای افزودن گزینه دوم باید مرحله بالا را تکرار کنید).

این تمام کاری است که ما با UI / Main.Storyboard خود انجام خواهیم داد.. اکنون به پرونده “ViewController.swift” بروید. همانطور که در زیر نشان داده شده است ، UITableViewDelegate ، UITableViewDataSource را به viewController.swift خود اضافه کنید –

 

برای دیدن این روش ها ، Command + بر روی UITableViewDataSouce کلیک کنید و دو روش اول را با داشتن استدلال های “numberOfRowsInSection” ، “cellForRowAtIndex” کپی کرده و آنها را در ViewController.swift ، قبل از viewDidLoad () قرار دهید.

این خطavailable (iOS 2.0 ، *) را از هر دو روش حذف کرده و “{}” را اضافه کنید.

Xcode باید در هر دو عملکرد خطا نشان دهد. با این حال ، نگران نباشید زیرا این به این دلیل است که ما نوع بازگشتی از آن توابع را اضافه نکرده ایم.

numberOfRowsInSection – این تابع تعداد ردیفی را که بخش ما در بر خواهد گرفت ، تعریف می کند. بنابراین همین حالا این خط را به روش خود اضافه کنید.

return 1 //This will return only one row.

 

cellForRowAt – این روش محتوای هر سلول را برمی گرداند ، indexPath شامل فهرست هر سلول است. ما یک سلول ایجاد می کنیم و سپس مقداری مقدار به آن سلول اختصاص می دهیم و در آخر سلول را برمی گردانیم.

اکنون تابع های شما باید به صورت زیر باشد –

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 1; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: 
   UITableViewCellStyle.default, reuseIdentifier: "Cell") 
   cell.textLabel?.text = "First Row" 
   return cell 
}

 

در خط اول، ما در حال ایجاد یک سلول با سبک پیش فرض هستیم و reuseIdentifier نام نمونه اولیه سلول است که ایجاد کردیم.

Cell.textLable؟ .text – این متنی را تعریف می کند که باید به عنوان عنوان آن سلول ظاهر شود.

سرانجام، سلول را از آنجا برمی گردانیم. اکنون برنامه خود را اجرا کنید ، باید به صورت زیر باشد –

برنامه جدول زمانی

در این برنامه، ما آخرین پروژه خود را ادامه می دهیم و در آنجا جدول ۲ (۲… ۱۰… ۲۰) را چاپ می کنیم ، برنامه ای را ایجاد خواهیم کرد.

بنابراین ، برای ساخت این برنامه ، فقط پرونده کنترل کننده مشاهده پروژه را تغییر دهید.

توابع را مطابق شکل زیر تغییر دهید –

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 10; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
}

 

اکنون برنامه خود را اجرا کنید.

اکنون، همانطور که ما نمایش جدول را تکمیل کردیم و یک برنامه کاربردی ایجاد کردیم  بنابراین در اینجا یک چالش سریع برای حل ما وجود دارد.

 

چالش

 

برنامه ای را ایجاد کنید که در آن جدول شمارش هر کدام از ورودی های کاربر را چاپ کنیم.

نکته – ورودی را بگیرید ، یک دکمه اضافه کنید ، که با فشار دادن آن جدول با شمارش آن شماره بارگیری می شود. در اینجا ما به عملکرد زیر نیز نیاز خواهیم داشت ، که داده های جدول را بارگیری مجدد می کند.

tableView.reloadData ()

 

این یک چالش برای شماست زیرا ما همه مباحث مربوط به این برنامه را پوشش داده ایم ، بنابراین راه حلی برای این موضوع ارائه نمی دهیم.

برنامه تایمر تخم مرغ

در این برنامه ، ما از مفهوم ()Timer و Class Constructor استفاده خواهیم کرد که زمان را مدیریت می کند. ما مفهوم و کدگذاری را به شما ارائه خواهیم داد. شما باید UI را خودتان بسازید زیرا ما قبلاً در فصل های قبلی خود بارها در مورد هر عنصر UI بحث کرده ایم. (اگرچه ما نکاتی را برای هر آنچه کاملاً جدید به نظر می رسد ارائه خواهیم داد).

در این برنامه چه اتفاقی می افتد؟

  • برچسب عنوان دارای مقدار اولیه ۲۱۰ است.
  • با کلیک روی دکمه پخش، مقدار باید هر ثانیه یکبار کاهش یابد.
  • با کلیک روی مکث، مقدار باید فقط در آنجا متوقف شود.
  • با کلیک روی ۱۰- ، مقدار باید ۱۰ کاهش یابد و کاهش باید ادامه یابد.
  • با کلیک روی ۱۰+ ، مقدار باید ۱۰ افزایش یابد و کاهش باید ادامه یابد.
  • با کلیک روی تنظیم مجدد ، مقدار باید ۲۱۰ شود.
  • مقدار هرگز نباید به زیر ۰ برسد.

 

مفهوم

  • ما از متغیر کلاس ()Timer () → var timer = Timer  استفاده خواهیم کرد.
  • ما برای این متغیر تایمر که درست کردیم مقداری تعیین می کنیم.
  • timer = Timer.scheduledTimer (timeInterval: 1، target: self، selector: #selector (ViewController.processTimer)، userInfo: nil ، تکرارها: true)
  • timeInterval -> فاصله زمانی است که می خواهیم استفاده کنیم ،
  • target -> کنترل کننده نمایش است که باید انجام شود ،
  • Selector -> نام تابع است که از این تایمر استفاده می کند ،
  • userInfo -> null و تکرار ، بله ما می خواهیم تکرار کنیم تا درست باشد.

تایمر نامعتبر 

برای متوقف کردن یک تایمر از طریق برنامه نویسی ، تابع ()timer.invalidate را اضافه خواهیم کرد.

عناصری که ما استفاده کرده ایم –

  • نوار پیمایش – در نوار پیمایش ، ما سه مورد اضافه کرده ایم.
  • نوار دکمه ای، یکی در سمت چپ و دیگری در سمت راست.

نوار ابزار – یک نوار ابزار در پایین صفحه برنامه ظاهر می شود و شامل دکمه هایی برای انجام اقدامات مربوط به نمای فعلی یا محتوای موجود در آن است.

نوارهای ابزار شفاف هستند و ممکن است رنگ زمینه ای داشته باشند. آنها غالباً پنهان می شوند که بعید به نظر می رسد مردم به آنها احتیاج داشته باشند.

ما یک نوار ابزار در پایین UI خود اضافه کرده ایم که دارای ۵ مورد است.

  • سه مورد از دکمه های نوار ، به نام ۱۰- ، بازنشانی و ۱۰+.
  • دو فضای انعطاف پذیر: فضای انعطاف پذیر بین موارد دکمه نوار –

چگونه آیکونی به آیتم دکمه نوار اضافه کنیم؟

مورد دکمه نوار خود را انتخاب کنید. بر روی مورد دکمه نوار خود کلیک کنید ، به Attribute inspector بروید ، بر روی Select Item کلیک کنید و مورد را از لیست کشویی ظاهر شده انتخاب کنید.

به همین ترتیب، برای همه دکمه های دیگر موارد را انتخاب کرده و همانطور که در بالا آورده شد یک UI ایجاد کنید. یک برچسب به مرکز View اضافه کنید و آن را به عنوان یک خروجی متصل کنید ، نام آن را – timeLeftLabel بگذارید.

اقدام برای شروع تایمر
در زیر برنامه تایمر شروع است.

@IBAction func startTimerButton(_ sender: Any) { 
   if !timerActive { 
      timerActive = true 
      eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
      #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
   } 
}

 

تابع زیر را ایجاد کنید –

func stopTimer() { 
   timerActive = false 
   eggTimer.invalidate() 
}

 

اقدام برای توقف تابع

در زیر برنامه مربوط به تابع متوقف شده است.

@IBAction func pauseTimerButton(_ sender: Any) { 
   stopTimer() 
}

 

اقدام برای کم کردن زمان

در زیر برنامه کم کردن زمان است.

@IBAction func subtractTime(_ sender: Any) { 
   if timeLeft > 10 { 
      timeLeft = timeLeft - 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
}

 

اقدام برای بازنشانی زمان

در زیر برنامه تنظیم مجدد زمان وجود دارد.

@IBAction func resetTimer(_ sender: Any) { 
   timeLeft = 210 
   timeLeftLabel.text = String(timeLeft) 
}

 

اقدام برای اضافه کردن زمان

در زیر برنامه اضافه کردن زمان است.

@IBAction func addTime(_ sender: Any) { 
   timeLeft = timeLeft + 10 
   timeLeftLabel.text = String(timeLeft) 
}

 

اکنون ، viewController.swift باید به این شکل باشد –

import UIKit 
class ViewController: UIViewController { 
   @IBOutlet weak var timeLeftLabel: UILabel! 
   var eggTimer = Timer()  // Initialize the Timer class. 
   var timerActive = false // Prevents multiple timers from firing. 
   var timeLeft = 210  
   func stopTimer() { 
      timerActive = false 
      eggTimer.invalidate() 
   } 
     
   func processTimer() { 
      if timeLeft <= 0 { 
         stopTimer() 
         return 
      }     
      timeLeft = timeLeft - 1; 
      timeLeftLabel.text = String(timeLeft) 
   } 
    
   @IBAction func startTimerButton(_ sender: Any) { 
      if !timerActive {
         timerActive = true 
         eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
         #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
      } 
   } 
     
   @IBAction func pauseTimerButton(_ sender: Any) { 
      stopTimer() 
   } 
    
   @IBAction func subtractTime(_ sender: Any) { 
      if timeLeft > 10 { 
         timeLeft = timeLeft - 10 
         timeLeftLabel.text = String(timeLeft) 
      } 
   } 
     
   @IBAction func resetTimer(_ sender: Any) { 
      timeLeft = 210 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   @IBAction func addTime(_ sender: Any) { 
      timeLeft = timeLeft + 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
   }  
   override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated
   } 
}

 

این تمام کاری است که ما در برنامه خود انجام خواهیم داد، سعی کنید برنامه را اجرا کنید، باید خوب اجرا شود.

ذخیره اطلاعات در محل ذخیره سازی محلی

ذخیره داده ها در حافظه محلی به معنای استفاده از ذخیره سازی دستگاه محلی برای ذخیره داده های مربوط به برنامه در دستگاه است. ما دو روش برای ذخیره داده ها در یک حافظه محلی داریم یعنی NSUserDefault و CoreData.

بگذارید آنها را با جزئیات درک کنیم.

پیش فرض های NSUser

NSUserDefaults برای ذخیره داده های کوچک مانند تنظیمات برگزیده ، تنظیمات یا مقادیر منفرد در نظر گرفته شده است. برای استفاده از UserDefaults در برنامه خود ، ما فقط باید از طریق کد خود یک مرجع به nsuserDefaults ایجاد کنیم همانطور که در زیر نشان داده شده است.

let defaultValues = NSUserDefaults.standardUserDefaults()

 

برای تنظیم مقادیر روی داده ها در UserDefaults می توان از کد زیر استفاده کرد –

defaultValues.setObject("Simplified iOS", forKey: "nameKey")  
func setDouble(value: Double, forKey defaultName: String) 
func setBool(value: Bool, forKey defaultName: String) 
func setObject(value: AnyObject?, forKey defaultName: String) 
func setURL(url: NSURL?, forKey defaultName: String) 
func setInteger(value: Int, forKey defaultName: String) 
func setFloat(value: Float, forKey defaultName: String)

 

برای دریافت مقادیر از NSUserDefaults ، می توانیم از کد زیر استفاده کنیم.

func boolForKey(defaultName: String) -> Bool 
func integerForKey(defaultName: String) -> Int 
func floatForKey(defaultName: String) -> Float 
func doubleForKey(defaultName: String) -> Double 
func objectForKey(defaultName: String) -> AnyObject? 
func URLForKey(defaultName: String) -> NSURL?

 

CoreData

CoreData یک چارچوب پایدار است که از معاملات بزرگ داده پشتیبانی می کند. CoreData به شما امکان می دهد برای ذخیره سازی داده های کاربر ، یک مدل ویژگی-موجودیت رابطه ای ایجاد کنید. CoreData یک چارچوب است و می تواند از SQLite ، قالب های باینری برای ذخیره داده استفاده کند.

برای استفاده از CoreData در برنامه خود ، ما با یک پروژه جدید شروع می کنیم و هنگام ایجاد پروژه مطمئن شوید که “Use Core Data” را علامت بزنید.

ورود به سیستم با استفاده از داده های اصلی – ایجاد یک پروژه جدید ، استفاده از CoreData را همانطور که در تصویر زیر نشان داده شده است ، انتخاب کنید.

این فایل CoreData_demo.xcdatamodeld پایگاه داده ماست که در آن جدول کاربر خود را ایجاد کرده و داده ها را ذخیره خواهیم کرد.

مفهوم – آنچه در مورد CoreData وجود دارد این است که ، حتی اگر برنامه را ببندیم و بعد از ماهها آن را باز کنیم ، باز هم داده هایی که ذخیره کرده ایم خواهد داشت که در برنامه بعدی که ایجاد خواهیم کرد ، مشاهده خواهیم کرد.

اکنون خواهیم دید که چگونه داده های اصلی را اضافه کنیم و داده های اصلی را بازیابی کنیم.

Add Core Data – برای افزودن CoreData ، روی پرونده CoreData_demo.xcdatamodeld کلیک کنید و سپس خالی بودن موجودیت را مشاهده خواهیم کرد. بر روی دکمه add Entity کلیک کنید ، این یک موجودیت اضافه خواهد شد ، اکنون بر روی نام موجودیت دوبار کلیک کنید و نام هر چیزی را که دوست دارید تغییر دهید.

نهاد را اضافه کنید
حالا روی موجودیت کلیک کنید و می بینیم که قسمت ویژگی ها خالی است. روی نماد بعلاوه کلیک کنید و نام موجودیت را تغییر دهید. entity name را از قسمت بعدی انتخاب کنید.

ما یک entity و یک ویژگی در آن اضافه کرده ایم. حال ، اگر به AppDelegate.swift برویم ، می توانیم ببینیم که دو عملکرد جدید اضافه شده است زیرا ما CoreData را انتخاب کرده ایم.

توجه – قبل از ادامه ، CoreData را در پرونده خود وارد کنید.

ذخیره داده در Core Data – برای ذخیره برخی از داده ها در CoreData ، باید یک شی از کلاس AppDelegate بسازیم.

let appDelegate = UIApplication.shared.delegate as! AppDelegate

 

 

let context = appDelegate.persistentContainer.viewContext

 

سپس ، ما باید یک شی entity ایجاد کنیم، که entity ما را فراخوانی کند –

let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)

 

اکنون مقدار ویژگی را که ایجاد کردیم تنظیم خواهیم کرد.

newValue.setValue(textField.text, forKey: "name")

 

ما با استفاده از داده ها را ذخیره خواهیم کرد

context.save();

 

واکشی از داده های اصلی – هنگام واکشی ، دو مرحله فوق (ایجاد appDelegate و زمینه) یکسان خواهد بود. سپس ، یک درخواست واکشی ایجاد خواهیم کرد.

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 

 

ما یک شی برای ذخیره نتیجه ایجاد خواهیم کرد.

let results = try context.fetch(request)

 

سپس طبق نیاز خود نتایج را بررسی خواهیم کرد. با برنامه بعدی که ایجاد می کنیم تعداد بیشتری از CoreData را مشاهده خواهیم کرد.

چالش – سعی کنید برنامه ای ایجاد کنید ، جایی که کاربر نام را وارد کند ، سپس روی ورود کلیک کرده و برنامه را ببندد. وقتی دفعه بعدی که کاربر برنامه را باز کرد ، باید همچنان به سیستم وارد شود. سپس یک دکمه – ورود به سیستم اضافه کنید ، و اگر روی آن کلیک کند ، برنامه دوباره نام کاربری را درخواست می کند.

ورود / خروج با استفاده از CoreData

یک پروژه نمایشی به نام ‘Login’ ایجاد کنید ، استفاده از CoreData را انتخاب کنید. روی CoreData_demo.xcdatamodeld کلیک کنید و موجودیتی به نام «کاربران» اضافه کنید. در داخل آن ، صفتی به نام “name” اضافه کنید.

به main.storyboard بروید ، یک قسمت نوشتاری و یک دکمه ورود به سیستم اضافه کنید. در زیر آن ، یک برچسب اضافه کنید ، روی آن دوبار کلیک کنید و محتوای آن را حذف کنید. سپس ، یک دکمه خروج اضافه کنید ، به بازرس ویژگی آن بروید و “آلفا” را برابر با ۰ کنید. اکنون ، نمای ما باید به صورت زیر باشد –

اکنون، به پرونده کنترل کننده viewخود بروید ، دستیار ویرایشگر را باز کرده و ارتباطاتی بین UI Elements و پرونده کنترل کننده خود ایجاد کنید.

توجه – ما همچنین خروجی هایی را برای هر دو دکمه ایجاد خواهیم کرد ، زیرا باید ظاهر آن دکمه ها را اصلاح کنیم. به عنوان مثال – هنگامی که یک کاربر وارد سیستم می شود ، ما دکمه ورود به سیستم را پنهان می کنیم ، اگر کاربر وارد سیستم نشود ، دکمه ورود به سیستم را نشان می دهیم و پنهان می کنیم.

همانطور که قبلاً در مورد افزودن و واکشی داده ها از CoreData بحث کردیم ، کد را در اینجا قرار می دهیم.

Try-Catch – متوجه خواهید شد که ما بارها در کد از بلوک try-catch استفاده کرده ایم. به این دلیل است که اگر ما از بلوک های try-catch استفاده نکنیم و در برنامه ما استثنا یا خطایی وجود داشته باشد ، اجرا متوقف می شود. در حالی که ، اگر ما از بلوک های try try استفاده می کنیم و اگر خطایی رخ دهد ، بلوک catch خطا را کنترل می کند. اطلاعات بیشتر در مورد آن را در آموزش Swift ما بخوانید

کد ورود به سیستم / برنامه ورود به سیستم

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

دکمه ورود به سیستم – کد زیر نحوه افزودن اکشن دکمه ورود را توضیح می دهد.

var isLoggedIn = false 
@IBAction func logIn(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate
   let context = appDelegate.persistentContainer.viewContext 
   if isLoggedIn { 
      let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
      do { 
         let results = try context.fetch(request) 
         if results.count > 0 { 
            for result in results as! [NSManagedObject] { 
               result.setValue(textField.text, forKey: "name") 
               do { 
                  try context.save() 
               } 
               catch { 
                  print("Update username failed") 
               } 
            } 
            label.text = "Hi " + textField.text! + "!" 
         } 
      } 
      catch { 
         print("Update failed") 
      } 
   } else { 
      let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context) 
      newValue.setValue(textField.text, forKey: "name") 
      do { 
         try context.save() 
         logInButton.setTitle("Update username", for: []) 
         label.alpha = 1 
         label.text = "Hi " + textField.text! + "!" 
         isLoggedIn = true 
         logOutButton.alpha = 1 
      }  
      catch { 
         print("Failed to save") 
      }     
   } 
}

 

دکمه خروج – کد زیر نحوه افزودن اکشن دکمه خروج را توضیح می دهد.

@IBAction func logOut(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   do { 
      let results = try context.fetch(request) 
      if results.count > 0 { 
         for result in results as! [NSManagedObject] { 
            context.delete(result) 
            do { 
               try context.save() 
            } catch { 
               print("Individual delete failed") 
            } 
         } 
         label.alpha = 0 
         logOutButton.alpha = 0 
         logInButton.setTitle("Login", for: []) 
         isLoggedIn = false 
         textField.alpha = 1 
      } 
   } catch { 
      print("Delete failed") 
   } 
}

 

()ViewDidLoad  – کد زیر نحوه استفاده از تابع ()ViewDidLoad  را توضیح می دهد.

override func viewDidLoad() { 
   super.viewDidLoad() 
   // Do any additional setup after loading the view, typically from a nib.
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   request.returnsObjectsAsFaults = false 
   do { 
      let results = try context.fetch(request) 
      for result in results as! [NSManagedObject] { 
         if let username = result.value(forKey: "name") as? String { 
            logInButton.setTitle("Update username", for: []) 
            logOutButton.alpha = 1 
            label.alpha = 1 
            label.text = "Hi there " + username + "!" 
         }     
      } 
             
   } catch { 
      print("Request failed") 
   } 
}

 

به یاد داشته باشید که باید برای هر دو دکمه یک خروجی و یک اقدام ایجاد کنید.

اکنون ، برنامه را ذخیره کرده و اجرا کنید. وارد سیستم شوید ، برنامه را ببندید و دوباره آن را اجرا کنید. باید به صورت زیر باشد.

این تمام کاری است که ما با CoreData انجام خواهیم داد. با استفاده از همان مفاهیم ، می توانیم بسیاری از برنامه های CoreData را بسازیم.

کنترل صفحه کلید

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

صفحه کلید باید با کلیک کردن در خارج از قسمت ورودی ناپدید شود
این یک کار ساده است ، برای انجام این کار فقط کد زیر را قبل از بستن آکولاد در پرونده viewController خود وارد کنید.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
   self.view.endEditing(true)  
}

 

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

 

منبع.

 

لیست جلسات قبل آموزش توسعه iOS با Swift 2

  1. آموزش توسعه iOS با Swift 2
  2. آموزش Xcode IDE در توسعه iOS با Swift 2 
  3.  اولین برنامه در توسعه iOS با Swift 2 
  4. آموزش ساخت برنامه تعاملی در توسعه iOS با Swift 2
  5. آموزش ساخت برنامه ها با Swift
  6. آموزش iOS پیشرفته در توسعه iOS با Swift 2
  7. آموزش یکپارچه سازی نقشه ها در توسعه iOS با Swift 2
  8. آموزش طرح بندی خودکار در توسعه  iOS با Swift 2 
  9. آموزش انیمیشن ها در توسعه  iOS با Swift 2
  10.  آموزش دسترسی به خدمات وب در توسعه  iOS با Swift 2
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه