مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

جلسه شانزدهم آموزش iOS :کار با Core Data - بخش دوم


این دومین مقاله از سری مقالات مربوط به Core Data می باشد. در جلسه قبل ، یک مقدمه کوتاه درباره Core Data ، ارائه کردیم و یک اپ ساده برای ذخیره سازی اطلاعات دستگاه ها ، ساختیم. با این حال ، فقط نشان دادیم که چگونه با استفاده Core Data API ، رکوردها را به مخزن داده ها ، اضافه کنیم. اما ، در مورد عملیات های update (به روز رسانی) و delete (حذف) ، بحثی به میان نیاوردیم.

در این آموزش ، کار بر روی اپ را ادامه خواهیم داد ، و بر موارد ذیل ، تمرکز خواهیم داشت:

  • به روز رسانی و حذف یک شیء با استفاده از Core Data API.
  • مشاهده کردن عبارات خام SQL برای اهداف اشکال زادیی.

به روز رسانی و حذف یک شیء با استفاده از Core Data API

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

در جلسه قبل ، ما در مورد نحوه واکشی و ذخیره managed object ، با استفاده از Core Data API ، بحث کردیم. اکنون می خواهیم بدانیم ، به چه صورت می توانیم ، یک شیء managed object موجود در پایگاه داده را به روز رسانی و با حذف ، نماییم.

حذف یک شیء

ابتدا ، در مورد عملیات حذف ، صحبت خواهیم کرد. برای این که ، به کاربر اجازه دهیم ، یک رکورد را از table view ، حذف نماید ، همان طور که می دانید ، به راحتی می توانیم ، متدهای  “canEditRowAtIndexPath” و “commitEditingStyle” را پیاده سازی نماییم. کد زیر را به فایل DeviceViewController.m ، اضافه می کنیم.


	- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
 
 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObjectContext *context = [self managedObjectContext];
 
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete object from database
        [context deleteObject:[self.devices objectAtIndex:indexPath.row]];
        
        NSError *error = nil;
        if (![context save:&error]) {
            NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
            return;
        }
        
        // Remove device from table view
        [self.devices removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
}

 

وارد جزئیات و نحوه حذف یک ردیف از table view ، همانند آن چه که در جلسه قبل پوشش داده ایم ، نمی شویم. مشابه کاری که برای ذخیره سازی داده در جلسه قبل انجام دادیم، ابتدا ، manage object context را در اختیار می گیریم. Context ، متدی با نام “deleteObject” را فراهم می آورد که به ما اجازه می دهد ، یک شیء خاص را از پایگاه داده ، حذف کنیم. در نهایت ، متد “save” را جهت اعمال تغییرات ایجاد شده، فراخوانی می نماییم. پس از حذف شیء از پایگاه داده ، رکورد موردنظر را از table view ، نیز حذف خواهیم کرد.

اکنون ، بیایید اپ را اجرا کرده و یک رکورد را از پایگاه داده حذف کنیم. ظاهر اپ ، باید شبیه تصویر زیر باشد:

به روز رسانی یک شیء

در ادامه ، قصد داریم اپ خود را ارتقاء داده و به کاربر ، اجازه به روز رسانی اطلاعات دستگاه را بدهیم. به Storyboard رفته و یک segue جدید برای سلول جدول ، اضافه می کنیم. این segue ، برای ایجاد ارتباط سلول جدول و detail view controller ، به کار می رود. هنگامی که کاربر، هر دستگاهی را در table view ، انتخاب کند ، detail view controller ، اطلاعات دستگاه انتخاب شده را نمایش می دهد.

برای ایجاد تمایز بین این segue و segue دیگر که برای افزودن یک دستگاه جدید ، به کار می رود ، یک شناسه به نام “UpdateDevice” ، تعریف می کنیم. سپس ، متد prepareForSegue ، را به فایل DeviceViewController.m ، اضافه می کنیم.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"UpdateDevice"]) {
        NSManagedObject *selectedDevice = [self.devices objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
        DeviceDetailViewController *destViewController = segue.destinationViewController;
        destViewController.device = selectedDevice;
    }
}

هنگامی که کاربر ، یک دستگاه خاص را در table view ، انتخاب می کند ، داده ها از طریق segue ، “UpdateDevice”  ، انتقال داده خواهد شد. سپس ، اطلاعات دستگاه انتخاب شده را بازیابی کرده و آن را به detail view controller ، انتقال می دهیم.

در ادامه ، یک خصیصه جدید ، برای ذخیره سازی اطلاعات دستگاه انتخاب شده ، در فایل DeviceDetailViewController.h ، اضافه می کنیم:

@property (strong) NSManagedObject *device;

طبق روال ، دستور synthesis را به فایل DeviceDetailViewController.m ، اضافه می کنیم.

@implementation DeviceDetailViewController
@synthesize device;

برای نمایش اطلاعات دستگاه انتخاب شده ، باید تغییرات زیر را در متد “viewDidLoad”  ، اعمال کنیم:

- (void)viewDidLoad
{
    [super viewDidLoad];
 // Do any additional setup after loading the view.
    if (self.device) {
        [self.nameTextField setText:[self.device valueForKey:@"name"]];
        [self.versionTextField setText:[self.device valueForKey:@"version"]];
        [self.companyTextField setText:[self.device valueForKey:@"company"]];
    }
 
}

بیایید کار را اینجا ، متوقف کرده و سعی کنیم دوباره اپ را اجرا کنیم. پس از راه اندازی اپ ، روی یکی از دستگاه ها ضربه می زنیم ، اطلاعات دستگاه ، باید در صفحه detail view ، نمایان شود.

با این حال ، هنوز کار اپ ، تمام نشده است. اگر سعی کنیم که اطلاعات یک دستگاه را ویرایش نماییم ، اطلاعات دستگاه ، به درستی ، به روز رسانی نخواهد شد. به فایل DeviceDetailViewController.m  ، بازگشته و متد “save” را تغییر می دهیم:

- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];
    
    if (self.device) {
        // Update existing device
        [self.device setValue:self.nameTextField.text forKey:@"name"];
        [self.device setValue:self.versionTextField.text forKey:@"version"];
        [self.device setValue:self.companyTextField.text forKey:@"company"];
 
    } else {
        // Create a new device
        NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Device" inManagedObjectContext:context];
        [newDevice setValue:self.nameTextField.text forKey:@"name"];
        [newDevice setValue:self.versionTextField.text forKey:@"version"];
        [newDevice setValue:self.companyTextField.text forKey:@"company"];
    }
    
    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }
    
    [self dismissViewControllerAnimated:YES completion:nil];
}

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

سعی می کنیم مجدداً اپ را تست نماییم. قابلیت به روز رسانی ، اکنون باید به درستی کار کند:

 

مشاهده عبارات خام SQL

حتی بدون یادگیری مفاهیم SQL و پایگاه داده ، Core Data ، ما را قادر ساخته است که عملیات های create ، select ، update و delete را اجرا نماییم. با این حال ، برای افرادی که پیش زمینه ذهنی در مورد پایگاه داده دارند ، ممکن است بخواهند دستورات دقیق SQL را که پشت صحنه اجرا می شوند ، ببینند.

برای فعال کردن خروجی SQL ، برای اهداف اشکال زدایی (debugging) ، روی “MyStore” کلیک کرده و گزینه “Edit Scheme” را انتخاب می کنیم.

در زیر بخش “Argument Passed on Launch” ، روی کلید “+” کلیک کرده و پارامتر “-com.apple.CoreData.SQLDebug 1” را اضافه می کنیم.

برای پیکربندی ، روی کلید “OK” کلیک می کنیم. اکنون ، اپ را دوباره اجرا می کنیم. خواهیم دید که عبارات خام SQL (مانند SELECT و UPDATE) در پنجره خروجی ، نمایش داده می شوند.

 

 

موضوع جلسه بعد چیست؟

امیدواریم آموزش جلسه امروز ، برای شما مفید واقع شده باشد. و درک خوبی از Core Data به دست آورده باشید.

در جلسه بعد ، در مورد رابطه شیء (object relationship) صحبت خواهیم کرد و نحوه بهینه سازی اپ را با استفاده از کنترلر NSFetchedResultsController ، نشان خواهیم داد.

فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 5 , تعداد قسمت ها: 221 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

در این فصل:-نمایش notification به کاربر زمانی که اتفاقاتی از قبیل لایک کردن پست و ... میافتد(این مبحث مبحثی مهم بوده و ج…

  توضیحات کلی دوره: با سلام خوش اومدین به حرفه ای ترین دوره ی Swift ابتدای کار ممکن است سوالی برای شما پیش آید: -من نیازی به ساخت اپلیکیشن اجتماعی ندارم چرا باید این دوره را ببینم؟ ج…
فصلِ: 7 , تعداد قسمت ها: 159 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

اپل نویس حرفه ای شوید... با این پکیج کسب درآمد میلیونی کنید....   در این پکیج به نکات ریز و درشت زیادی پرداختیم که خیلی خیلی میتونه به شما کمک کنه که تبدیل به برنامه نویس حرفه ای شوید... …
فصلِ: 12 , تعداد قسمت ها: 126 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

فصل 16 فصل آخرمون هست و میایم توی این فصل یه سری مباحث کوچیکی که جامونده و کارهای نهایی برای انتشار برنامه توی مایکت های…

با سلام نکته:هیچ نیازی به mac و یا iphone نیست... نکته:هیچ نیازی به بلد بودن برنامه نویسی از قبل نیست... مباحثی که توی این دوره مرور میکنیم میتونه ما رو از سطح صفر برنامه نویسی ios به صد …
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…
فصلِ: 5 , تعداد قسمت ها: 51 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش پرداخت درون برنامه ای بازار در یونیتی-اموزش خرید سکه در بازی-اموزش خرید مصرفی و غیر مصرفی…

توضیحات کلی مجموعه: آموزش مقدماتی تا پیشرفته یونیتی(ساخت بازی توپ چرخنده-اموزش بازی دوبعدی-اموزش بازی سه بعدی اول شخص شوتر-اموزش بازی سه بعدی رالی (ماشین سواری))   سرفصلهای دوره: نصب ی…
فصلِ: 2 , تعداد قسمت ها: 68 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت یک فروشگاه کوچک-آموزش کار با bottom navigation -آموزش کار با تب بار-آموزش کار با scrollview - آموزش کار با ان…

توضیحات کلی مجموعه: آموزش دوره فلاتر از پایه تا پیشرفته(این دوره به دوره متخصص فلاتر تغییر پیدا کرد) درسال های گذشته تعدا زیادی فریمورک معرفی شد که هرکدام تجربه خاص خودش رو داشت،اما فلاتر …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید