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

جلسه 20ام آموزش iOS - مقدمه ای بر iCloud برنامه نویسی


در این جلسه قصد داریم درباره iCloud ، صحبت کرده و نحوه ذخیره و بازیابی داده ها از iCloud ، را به شما آموزش دهیم. iCloud ، یکی از قابلیت های جدید در iOS 5 ، می باشد. از دید کاربر ، iCloud ، قابلیت ساده ای است که دسترسی به اطلاعات شخصی از تمام دستگاه ها را به صورت بی سیم و خودکار از طریق Apple ID ، فراهم می کند. از دیدگاه یک توسعه دهنده ، می توان از iCloud API ، در iOS SDK ، برای یکپارچه سازی خدمات iCloud ، در اپ خود استفاده نمود.

 

iCloud چیست؟

اساساً ، iCloud ، سرویسی است که به کاربر کمک می کند ، تا داده ها را در دستگاه ها ، همگام سازی (synchronize)  نماید. هدف اصلی ، این است که کاربران به راحتی ، به داده های خود (چه یک فایل ، چه یک document) بتوانند از طریق هر یک از دستگاه های iOS خود دست یابند. با این که می توانیم از سایر خدمات cloud ، برای ذخیره فایل یا داده ها استفاده نماییم ، اما ، ایده اصلی که در پشت iCloud وجود دارد ، این است که همگام سازی صریح (explicit synchronization) ، بین دستگاه ها حذف شود. شرکت اپل  تمایل ندارد که کاربران درگیر خدمات cloud و همگام سازی شوند. همه چیز ، به سادگی و بدون ایراد ، کار می کند.

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

انواع ذخیره سازی

iCloud ، سه نوع iCloud storage ارائه می نماید:

  • Key-value storage : ذخیره سازی مقدر کلید ، برای مقادیر گسسته ، همانند ترجیحات (preferences) ، تنظیمات (settings) و وضعیت اپ ساده.
  • Document Storage : ذخیره سازی اسناد ، برای اطلاعات قابل مشاهده کاربر در فایل ها ، همانند اسناد پردازش کلمه (word processing documents) ، نقشه کشی و وضعیت اپ پیچیده.
  • Core Data Storage : برای راه حل های مربوط به پایگاه داده های چند دستگاهی ( multi-device database) ، برای محتواهای ساخت یافته. iCloud Core Data storage ، بر روی ذخیره سازی document ساخته شده است و از iCloud API های مشابه استفاده می نماید.

بر اساس نوع داده ای که ما با آن کار می کنیم ، نوع مناسب از ذخیره سازی را انتخاب می نماییم. در این آموزش ، ما فقط نوع ذخیره سازی key-value storage را پوشش داده و به شما نحوه ساخت اپ ساده را نشان خواهیم داد که note ها (یادداشت ها) را با استفاده از iCloud ، ذخیره می کند. (در جلسات بعدی ، در مورد سایر انواع ذخیره سازی ها ، صحبت خواهیم کرد.)

 

فعال کردن iCloud

برای استفاده از iCloud ، ابتدا نیاز داریم که به Apple Developer Program بپیوندیم. اگر حساب کاربری ندارید ، اقدام به خرید آن نمایید ، زیرا داشتن حساب کاربری ، از پیش نیازهای استفاده از iCloud می باشد.

فرض می کنیم که شما یک حساب کاربری iOS developer دارید. ما ، ابتدا یک App ID ، با iCloud خواهیم ساخت. وارد پورتال iOS Provisioning Portal شده و در sidebar (نوار کناری) ، App ID را انتخاب می کنیم. یک App ID جدید ، با کلیک کردن بر روی کلیدی که در بالا و سمت راست صفحه قرار دارد ، ایجاد می کنیم ، مانند شکل زیر:

در صفحه بعد ، بخش توضیحات (description) و unique identifier ، را تکمیل می نماییم.

سپس ، به App ID ، که ساخته ایم رفته و بر روی گزینه configure ، برای فعال کردن سرویس iCloud ، کلیک می کنیم:

برای فعال کردن قابلیت iCloud ، گزینه Enable for iCloud را انتخاب کرده و کلید Done را کلیک می کنیم.

 

ساخت یک اپ ساده Note ، با iCloud Integration

 پس از آماده کردن App ID ، سراغ ایچاد پروژه Xcode می رویم. Xcode را باز کرده و یک پروژه جدید ایجاد می کنیم، تمپلت Empty Application را مانند تصویر زیر انتخاب می کنیم:

در صفحه بعد ، نام پروژه را TamNote قرار داده و یک شناسه برای فیلد company identifier انتخاب می کنیم. فراموش نکنیم که گزینه “Use Automatic Reference Counting” را انتخاب نماییم. کلید Next و Create را کلیک می نماییم.

 

فعال کردن Entitlement برای key-value storage

Entitlement ها (استحقاق)، مربوط به دو key-value می باشند که صلاحیت های ویژه یا مجوزهای امنیتی برای اپ شما درخواست می نمایند. هنگامی که سیستم ، این حقوق را برای شما تأمین می نماید ، اپ شما دسترسی به iCloud key-value storage را به دست می آورد.

برای استفاده از iCloud key-value storage ، ابتدا ، entitlement ها را در Xcode target editor فعال نماییم ، سپس گزینه use store with identifier را انتخاب می کنیم. به صورت خودکار ، یک شناسه مربوط به بسته اپ (bundle of App) ، در Input box تنظیم می شود.

طراحی رابط کاربری

کار بعدی که نیاز داریم انجام دهیم ، ایجاد Storyboard می باشد ، که viewهای مربوط به اپ را تعریف می نماید. به منوی File > New > New File رفته و Storyboard را در بخش تمپلت User Interface  انتخاب می کنیم. روی کلید Next کلیک کرده و iPhone device family را انتخاب می کنیم ، سپس ، روی کلید Create ، کلیک می کنیم.

هم چنین ، نباید فراموش کنیم که کدهای تولید شده در متد:

(BOOL)application:application didFinishLaunchingWithOptions:launchOptions

، در داخل فایل AppDelegate را حذف نماییم. متد ، باید به سادگی کد زیر باشد.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

به Storyboard رفته و رابط کاربری را مطابق تصویر زیر ، می سازیم:

ابتدا ، یک Table View Controller ، درگ کرده و آن را در یک Navigation Controller ، جاسازی می کنیم. یک کلید ، در بخش بالا سمت راست از navigation bar ، درگ کرده و یک شناسه به نام “Add”  تنظیم می نماییم. با این کار ، کلید  به طور خودکار ، به “+” ، تغییر خواهد یافت. سپس ، prototype cell را انتخاب کرده و style آن را به “Basic”  تغییر می دهیم.

Table View Controller دیگر را درگ کرده و آن را در یک Navigation Controller  جاسازی می کنیم. سپس ، Bar Button  را به داخل navigation bar درگ می کنیم. یکی از آنها را Cancel و دیگری را Save  نامگذاری می کنیم. سپس ، یک static row ، به Table View ، اضافه کرده و یک Text Field ، مطابق شکل زیر اضافه می کنیم:

عبارت “Add Note View Controller” ، وقتی که کاربر  روی کلید “+” ، ضربه بزند ، نمایش داده خواهد شد. کلید کنترل را فشار داده و نگه می داریم ، روی کلید “+” ، کلیک کرده و آن را به داخل “Add Note View Controller” درگ می کنیم. “Model” را به عنوان Segue action انتخاب می کنیم.

 

ایجاد کلاس های View Controller

در ادامه ، دو کلاس جدید برای ایجاد ارتباط با table view controller ، تعریف می نماییم. نام یکی از کلاس ها را NoteListViewController  قرار داده و آن را به عنوان زیر کلاس از UITableViewController  تنظیم می کنیم. به Storyboard رفته ، table view controller از Note را انتخاب کرده و آن را به کلاس NoteListViewController تخصیص می دهیم.

پس از آن ، مراحل مشابهی را برای ایجاد Table View Controller دیگر ، طی می نماییم و نام آن را AddNoteViewController ، قرار می دهیم. در آخر ، textfield را به AddNoteViewController متصل می کنیم و دو متد action ، برای Cancel و Save ، ایجاد می کنیم.

کدها در فایل AddNoteViewController.h ، باید مطابق زیر باشد:

@interface AddNoteViewController : UITableViewController
- (IBAction)cancel:(id)sender;
- (IBAction)save:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *noteTextField;
 
@end

 

کار با iCloud


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

  • واکشی تمام یادداشت های (notes) در دسترس از cloud ، و نشان دادن آنها را داخل Table View.
  • حذف یادداشت از cloud.
  • افزودن یادداشت جدید و ذخیره کردن آن در cloud.

 

واکشی یادداشت ها

گام اول که نیاز داریم ، انجام دهیم ، پیاده سازی کلاس NoteListViewController  می باشد ، تا بتوانیم یادداشت های در دسترس در cloud  را در table view  نشان دهیم. فایل NoteListViewController.h  را باز کرده و خصیصه زیر را به آن اضافه می کنیم:

@property (strong, nonatomic) NSMutableArray *notes;

هدف این خصیصه ، ذخیره کردن یادداشت ها ، به صورت محلی می باشد. یادداشت ها را در مواقع مورد نیاز ، در table view نشان خواهیم داد. در ادامه ، نیاز داریم که یک lazy instantiation ، از این خصیصه بسازیم. کد زیر را در فایل NoteListViewController.m قرار می دهیم:

- (NSArray *)notes
{
    if (_notes) {
        return _notes;
    }
    
    _notes = [[[NSUbiquitousKeyValueStore defaultStore] arrayForKey:@"AVAILABLE_NOTES"] mutableCopy];
    if (!_notes) _notes = [NSMutableArray array]; 
 
    return _notes;
}

الگوی lazy instantiation ، تمام یادداشت های موجود را از iCloud ، با استفاده از کلاس NSUbiquitousKeyValueStore ، واکشی می کند. کلید  “AVAILABLE_NOTE” ، کلیدی است که برای ذخیره کردن آرایه note در cloud استفاده می شود. key-value storage  مربوط به iCloud ، بسیار شبیه به local user defaults store  می باشد. ما از کلاس NSUserDefault  ، برای کار با local user defaults store استفاده می کنیم ، در حالی که ، برای iCloud key-value store ، ما از کلاس NSUbiquitousKeyValueStore برای خواندن و نوشتن داده های خصیصه ، استفاده می نماییم.

در ادامه ، متد viewDidLoad: را با کد زیر ویرایش می کنیم:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.navigationItem.leftBarButtonItem = self.editButtonItem; 
    
    //  Observer to catch changes from iCloud 
    NSUbiquitousKeyValueStore *store = [NSUbiquitousKeyValueStore defaultStore];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(storeDidChange:)
                                                 name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
                                               object:store]; 
 
    [[NSUbiquitousKeyValueStore defaultStore] synchronize]; 
    
    // Observer to catch the local changes      
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didAddNewNote:)
                                                 name:@"New Note"
                                               object:nil]; 
}

 

آن چه که ما در اینجا ، انجام می دهیم ، این است که کلید Edit ، را در navigation bar اضافه کنیم ، تا کاربران بتوانند یادداشت خاصی را حذف نمایند. هم چنین ، یک ناظر به کنترلر را اضافه می کنیم ، تا زمانی که  داده ها در cloud ، تغییر داده می شوند ما بتوانیم notification (اعلان) ، آن را دریافت نماییم. هر دستگاهی که اپ را اجرا می نماید ، می تواند تغییرات key-value ، را در حساب کاربری iCloud کاربر ، آپلود نماید. به محض این که ، یک تغییر از iCloud دریافت شود، اعلان NSUbiquitousKeyValueStoreDidChangeExternallyNotification ارسال خواهد شد. بنابراین ، برای اطلاع داشتن از تغییرات key-value ، ما برای دریافت اعلان NSUbiquitousKeyValueStoreDidChangeExternallyNotification ، باید ثبت نام ( register ) ، نماییم.

برای اطمینان از این که ما با آخرین یادداشت های موجود  کار می کنیم ، یک متد همگام سازی را برای دریافت نسخه جدید از جفت key-value از iCloud ، فراخوانی می کنیم.

در نهایت ، یک ناظر دیگر برای مدیریت کردن اعلان “New Note”  ثبت می کنیم. این اعلان ، یک اعلان محلی است که وقتی کاربر ، یک یادداشت جدید ، با استفاده از “AddNoteViewController” ، اضافه می کند ، ارسال می شود.

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

#pragma mark - Observer New Note
 
- (void)didAddNewNote:(NSNotification *)notification
{
    NSDictionary *userInfo = [notification userInfo];
    NSString *noteStr = [userInfo valueForKey:@"Note"];
    [self.notes addObject:noteStr];
    
    // Update data on the iCloud
    [[NSUbiquitousKeyValueStore defaultStore] setArray:self.notes forKey:@"AVAILABLE_NOTES"];
    
    // Reload the table view to show changes
    [self.tableView reloadData];
}
 
#pragma mark - Observer
 
- (void)storeDidChange:(NSNotification *)notification
{
    // Retrieve the changes from iCloud
    _notes = [[[NSUbiquitousKeyValueStore defaultStore] arrayForKey:@"AVAILABLE_NOTES"] mutableCopy];
    
    // Reload the table view to show changes
    [self.tableView reloadData];
}

 

متد didAddNote ، زمانی که کاربر یک یادداشت جدید ذخیره می کند فراخوانی می شود. ما ابتدا ، یادداشتی را که جدیداً توسط کاربر ایجاد شده ، بازیابی می کنیم و آن را به آرایه محلی اضافه می کنیم ، سپس ، آرایه را در iCloud آپلود می کنیم. در نهایت ، table view را برای نشان دادن یادداشت جدید ، دوباره لود (load) می کنیم.

متد storeDidChange ، زمانی که داده ها در cloud تغییر می یابند ، فرخوانی خواهد شد. هنگامی که کاربر یک یادداشت جدید با استفاده از iPhone ، اضافه می کند ، اپ در دستگاه دیگر (برای مثال ، iPad) مطلع می شود. زمانی که  هر نوع به روز رسانی انجام شود ، ما به سادگی آخرین یادداشت موجود را از iCloud دوباره بازیابی کرده ، آن را به صورت محلی ، ذخیره می کنیم و table view را برای نشان دادن یادداشت ها ، مجدداً لود ، می کنیم.

نمایش دادن یادداشت ها در Table View

ما تقریباً ، یکپارچه سازی با iCloud را تکمیل کرده ایم. اگر شما قبلاً آموزش UITableView را خوانده باشید ، با این بخش آشنایی دارید. از آن جایی که قبلاً یادداشت های ذخیره شده در iCloud را بازیابی کرده ایم ، بقیه مراحل پیاده سازی مربوط به نمایش دادن یادداشت ها در table view ، می باشد. در فایل NoteListViewController.m ، کد زیر را اضافه می کنیم:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.notes count];
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    NSString *note = [self.notes objectAtIndex:indexPath.row];
    [cell.textLabel setText:note];
    
    return cell;
}

کد فوق ، بسیار ساده است. ما فقط یادداشت ها را در آرایه table view ، نمایش می دهیم.

حذف یادداشت ها از iCloud

برای حذف یادداشت ها از iCloud ، نیاز داریم که کد زیر را در فایل NoteListViewController.m پیاده سازی کنیم:

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
 
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.notes removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
        [[NSUbiquitousKeyValueStore defaultStore] setArray:self.notes forKey:@"AVAILABLE_NOTES"];
    }
}

هنگامی که کاربر ، یک یادداشت را از table view حذف می کند ، ما یادداشت انتخاب شده را از آرایه محلی ، و ردیف انتخاب شده را از table view  حذف می کنیم. در آخر ، آرایه یادداشت های به روز شده را به iCloud ارسال می کنیم.

افزودن یادداشت

اکنون ، به بخش آخر پیاده سازی می رسیم – پیاده سازی AddNoteViewController  ، برای افزودن یادداشت به cloud . به فایل پیاده AddNoteViewController رفته و کد زیر را اضافه می کنیم.

- (IBAction)cancel:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
 
- (IBAction)save:(id)sender {
    // Notify the previouse view to save the changes locally
    [[NSNotificationCenter defaultCenter] postNotificationName:@"New Note" object:self userInfo:[NSDictionary dictionaryWithObject:self.noteTextField.text forKey:@"Note"]];
    
    [self dismissViewControllerAnimated:YES completion:nil];
}

 

به یاد دارید که ما اعلان “New Note”  را در NoteListViewController  ثبت کرده ایم. در اینجا متد save ، فرستنده اعلان است. هنگامی که کاربر کلید save  را برای ذخیره کردن یادداشت ضربه می زند ، اپ ، اعلان “New Note” ، را به یادداشتی که اخیراً ایجاد شده ، پیوست کرده و پست می کند. این اعلان ، توسط NoteListViewController ، برداشته شده و یادداشت را در cloud ، ذخیره می کند.

تست اپ Note

برای تست اپ Note ، مجبور هستیم که آن را بر روی یک دستگاه واقعی ، برای کامپایل  کردن و اجرا قرار دهیم. برای تست اپ ، نمی توانیم از شبیه ساز استفاده کنیم ؛ زیرا شبیه ساز از iCloud پشتیبانی نمی کند. برای تست همزمانی iCloud می توانیم از دو دستگاه استفاده کنیم. باید مطمئن باشیم که iCloud ، در هر دو دستگاه فعال است. اپ را راه اندازی کرده و یک یادداشت در یکی از دستگاه ها اضافه می کنیم. ما یادداشت ظاهر شده در دستگاه دیگر را مشاهده خواهیم کرد.

 

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

در این جلسه ، ما آموزش اصول یکپارچه سازی iCloud و نحوه انجام ذخیره /بازیابی داده ها ، با استفاده از key-value storage ، پوشش دادیم. یک محدودیت برای این نوع از ذخیره سازی ها وجود دارد. فضای کل موجود در حافظه iCloud key-value در اپ ، 1 مگابایت ، به ازای هر کاربر می باشد. حداکثر تعداد کلیدها ، 1024 می باشد و محدودیت اندازه  برای هر مقدار مرتبط با یک کلید ، 1 مگابایت می باشد. بنابراین ، اگر یادداشت حاوی مقدار زیادی داده باشد ، از حد مجاز iCloud  تجاوز خواهد کرد.

از این رو ، key-value storage ، برای هر نوع از داده ها مناسب نیست. به طور معمول ، این روش ، برای ذخیره سازی ترجیحات و تنظیمات اپ ، مناسب می باشد. در آموزش بعدی ، قصد داریم نحوه ذخیره document ها را با استفاده از document storage ، نشان دهیم. البته ، یک اپ برای نشان دادن نحوه استفاده از document storage ، خواهیم ساخت.

فصلِ: 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 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید