گردهمایی بیست و نهم : اضافه کردن Cloud Backend به اپلیکیشن iOS با به کار گیری از Parse – نصیب دوم
این نوشتهعلمی ، نصیب دوم از یادگرفتن Cloud Backend میباشد. در قسمت نخستین از این طراحی اپلیکیشن در مشهد محرمانه آموزشی ، پیشگفتار ای راجع به سرویس ها (Backend BaaS) ارائه نمودیم و اپلیکیشن Recipe را برای به کارگیری از این نوع سرویس ها ، تغییر تحول دادیم. به مکان ذخیره سازی امر پخت ها به طور محلی و در باطن نرمافزار ، فرمان پخت ها را به Parse backend ، جابجایی دادیم. اینک ، اپلیکیشن Recipe به Parse متصل میباشد و امر پخت ها ، از cloud دانلود می گردند.
درحالتی که نصیب نخستین از این خصوصی آموزشی را تفحص کرده اید ، فعلا می بایست ادراک مبنا ای از Parse SDK را استخراج کرده باشید. در نصیب اولیه ، روش بازیابی شی ها از Parse را فراگیری دادیم. دراین قسمت ، طرز ذخیره سازی فرمان پخت های نو در Parse backend را علامت خوا هیم اعطا کرد. ولی ، روش حذف امر پخت از cloud را نیز خواهید آموخت.
ما فعالیت بر روی پروژه Xcode را که در قسمت اولیه ساخته ایم ، ادامه خوا هیم بخشید. از این رو ، در شرایطیکه پروژه و تمرین گرد هم آیی گذشته را اجرا نداده اید ، اکیداً سفارش میشود که یادگرفتن گردهمایی قبلی را رسیدگی فرمائید.
بیایید فعالیت را استارت کنیم.
آغاز فعالیت
پیش از این که وارد نصیب کدنویسی شویم ، بیایید به قابلیت و امکان های جدیدی که قرار میباشد جاری ساختن کنیم ، نگاه سریعی بیاندازیم. تا قبل از اینً ، ما یک نرمافزار Recipe ساخته ایم که امر پخت ها را از Parse بازیابی کرده و آنها را با به کارگیری از کلاس PFQueryTableViewController ، اکران میدهد. درین قسمت ، ما دو امکان دیگر را به اپلیکیشن اضافه خواهیم کرد که عبارتند از :
تولید فرمان پخت تازه و انبارکردن آن در cloud
حذف نمودن امر پخت مو جود از cloud
پیاده سازی رابط کاربری
در رابط کاربری اساسی اپلیکیشن ، تغییرات متعددی را ایفا نکرده ایم. با این اکنون ، برای این که به استفاده کننده این قابلیت را مهیا نماییم که بتواند امر پخت جدیدی را وارد کند ، یک view controller نو ، اضافه خواهیم کرد. View controller تازه با اسم “New Recipe” با ضربه زدن بر روی کلید “+” در رابط کاربری مهم ، فعال میشود. از روش کاغذ نو ساختوساز گردیده ، استفاده کننده میتواند داده ها امر پخت را که مشتمل بر اسم ، زمان مجال پخت ، مواد اول و تصویر امر پخت میباشد ، کامل کند.
از آن جایی که نمیخواهیم بر روی مسائل مرتبط با پیاده سازی تمرکز کنیم ، در اینجا ، شیوه ایجاد کرد رابط کاربری را نشانه نخواهیم اعطا کرد. view controller نو ، یعنی “New Recipe” یک پایین کلاس از UITableViewController میباشد و با استعمال از static table view ساخت میشود. اما ، ما شمارا تشویق میکنیم که رابط کاربری را خودتان بسازید ، البته ، برای صرفه جویی در حین ، میتوانید پروژه را از اینجا download the Xcode project from here دانلود فرمائید (آزمایش گردیده در Xcode 4.6.3). فولدر را از موقعیت زیپ بیرون کرده و آن را گشوده فرمائید. سایر این یادگرفتن را به تشکیل داد تمپلت کد ، تخصیص خوا هیم اعطا کرد.
پیش از ادامه فعالیت ، به خیال داشته باشید که application ID و client key را در فولدر RecipeBookAppDelegate.m ، به ID های Parse مربوط به پروژه خویش ، تغییر تحول دهید.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
[Parse setApplicationId:@\"\"
clientKey:@\"\"];
return YES;}
پیش از Xcode 4.5 ، اینگونه مفهومی از base internationalization وجود نداشت. Xcode دسته storyboard ها را برای هر محلی سازی ، تکرار میکرد. یعنی ، در حیث بگیرید اپی که به 5 لهجه محلی سازی گردیده باشد. Xcode 5 تیم از storyboard ها را با هدف ها طراحی اپلیکیشن در مشهد محلی سازی ، ساخت می کند. یک انواع عمده برای روند محلی سازی وجود دارااست. وقتی که نیاز به اضافه کردن یک عنصر UI نو در Storyboard ها داریم ، نیاز خوا هیم داشت یک المان شبیه را برای هر محلی سازی ، اضافه کنیم. این یک پروسه خسته کننده میباشد. به همین برهان میباشد که اپل ، امکان base internationalization را در Xcode 4.5 معرفی کرده است.
با base storyboard تنظیمات گردیده ، اینک استعداد داریم که عملیات محلی سازی به گویش فرانسوی را اجرا دهیم. آغاز ، view controller را در storyboard تعیین میکنیم . آنگاه ، به project info گشوده میگردیم. روی کلید + از نصیب Localization کلیک کرده و از لیست popup گویش French را تعیین میکنیم.
درپی ، از ما منظور می گردد که پوشه های منبع و لهجه مرجع را برای تولید محلی سازی French گزینش نماییم. آیتم ها را مبنی بر تصویر تحت گزینش میکنیم. کل پوشه ها را گزینش کرده و کلید Finish را کلیک میکنیم.
پس از ایفا فعالیت ، می بایست دقت خواهد شد که در navigator پروژه ، یک نشان مستطیلی صورت ، پس از MainStoryboard.storyboard ، وجود داراست. آن را پیشرفت میدهیم و خواهیم مشاهده کرد که دو base storyboard و یک پوشه strings از storyboard فرانسوی در آن وجود دارااست.
فولدر فرانسوی strings (یعنی MainStoryboard.strings (French)) را گزینش میکنیم. بایستی یک لیست از فن هایی با دو جفت key/value را می بایست ببینیم:
/* Class = \"IBUILabel\"; text = \"Stephane Mallat\"; ObjectID = \"0N3-up-Ts6\"; */
\"0N3-up-Ts6.text\" = \"Stephane Mallat\";
/* Class = \"IBUINavigationItem\"; title = \"Book Store\"; ObjectID = \"9EY-vY-nyh\"; */
\"9EY-vY-nyh.title\" = \"Book Store\";
/* Class = \"IBUILabel\"; text = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \"; ObjectID = \"gkh-KY-W1e\"; */
\"gkh-KY-W1e.text\" = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \";
/* Class = \"IBUIButton\"; normalTitle = \"Buy\"; ObjectID = \"jul-3l-6x7\"; */
\"jul-3l-6x7.normalTitle\" = \"Buy\";
/* Class = \"IBUILabel\"; text = \"A Wavelet Tour of Signal Processing\"; ObjectID = \"xi7-zh-v4N\"; */
\"xi7-zh-v4N.text\" = \"A Wavelet Tour of Signal Processing\";
زمانی که یک محلی سازی تازه را اضافه میکنیم ، Xcode درون base storyboard را کپی می نماید ، مورد های متنی آن ها را برای اعمال محلی سازی ، استحصال می کند و آنها را در باطن پوشه strings قرار میدهد. همانطور که در کدهای فوق میبینید ، حرفه های قابل مشاهده از storyboard ها همچون برچسب ، تیتر navigation bar و برچسب کلید در درون پوشه strings گذارده گردیده اند. مجموع موجودیت ها ، دارنده جفت مقادیر key/value میباشند. قسمت اولیه از key مرتبط با ID شیء از گزینه UI است. میتوانیم object ID از شیء UI را در ذیل نصیب Identity Inspector پیدا کنیم. برای مثال ، object ID از کلید Buy بر پایه ی صورت ذیل میباشد:
با داشتن فولدر strings ساخت گردیده ، شغل ما ترجمه کل مقادیر باطن این فولدر به لهجه فرانسوی میباشد. محتواها از پوشه MainStoryboard.strings برای ایفا محلی سازی به لهجه فرانسوی مبتنی بر محتوای ذیل است:
/* Class = \"IBUILabel\"; text = \"Stephane Mallat\"; ObjectID = \"0N3-up-Ts6\"; */
\"0N3-up-Ts6.text\" = \"Stephane Mallat\";
/* Class = \"IBUINavigationItem\"; title = \"Book Store\"; ObjectID = \"9EY-vY-nyh\"; */
\"9EY-vY-nyh.title\" = \"Librairie\";
/* Class = \"IBUILabel\"; text = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \"; ObjectID = \"gkh-KY-W1e\"; */
\"gkh-KY-W1e.text\" = \"Comprimer, restaurer et analyser un signal met en jeu des outils mathématiques sophistiqués, allant bien au-delà de la transformée de Fourier. Cet ouvrage mène le lecteur des bases du traitement du signal jusqu\'aux résultats les plus récents, en jouant sur l\'interaction entre les applications, le calcul numérique et les mathématiques. Il est conçu pour des élèves de maîtrise, de DEA ou de doctorat ainsi que pour des ingénieurs ou scientifiques qui analysent des données numériques.\";
/* Class = \"IBUIButton\"; normalTitle = \"Buy\"; ObjectID = \"jul-3l-6x7\"; */
\"jul-3l-6x7.normalTitle\" = \"Acheter\";
/* Class = \"IBUILabel\"; text = \"A Wavelet Tour of Signal Processing\"; ObjectID = \"xi7-zh-v4N\"; */
\"xi7-zh-v4N.text\" = \"Une exploration des signaux en ondelettes\";
محلی سازی تصویر
محلی سازی تصاویر با به کارگیری از Xcode عمل بسیار بی آلایش ای میباشد. همان گونه که در Demo نرمافزار دیدید ، میخواهیم تصویر cover را محلی سازی نماییم. تصویر “cover.jpeg” را از navigator پروژه گزینش میکنیم. آنگاه ، file inspector را خارج کشیده و به نصیب localization میرویم ، در آنجا یک کلید به اسم “Localize…” را خوا هیم روئت کرد. روی کلید ، کلیک میکنیم. از ما تأیید تعیین گویش الگلیسی را میخواهد ، روی کلید “Localize” برای اعمال تأیید ، کلیک میکنیم.
آنگاه ، یک مورد French را در نصیب localization خواهیم روءیت کرد. محلی سازی “French” را تعیین میکنیم. ما دو نسخه از تصویر cover,jpeg را شاهد آن هستیم.
به finder بر میگردیم و وارد دیکشنری پروژه میشود. دو فایل را خوا هیم رویت کرد: en.lproj و fr.lproj. هر دو فولدر به صورت خود کار بوسیله Xcode برای ایفا عملیات محلی سازی ، ساخت گردیده اند. فایل en.lproj پوشه های منبع برای محلی سازی انگلیسی میباشند ، در حالی که فولدر fr.lproj مرتبط با فولدر های منبع محلی سازی فرانسوی میباشند. در حالتی که نگاهی به هر دو فولدر بیاندازیم ، هر مورد دربردارنده فولدر cover.jpeg میباشند. نسخه فرانسوی از تصویر کاور را میتوانید از here دانلود نمایید (یا این که از تصویری که ما در فولدر قرار داده ایم ، به کار گیری نمایید).تصویر کاور دانلود گردیده را نسخه برداری کرده و آن را با تصویر مو جود در فایل fr.lproj جایگزین نمایید.
در حال حاضر ، مجال آزمایش نرم افزار است. در حالتی که کلیه چیز به صحت صورت گرفته باشد ، چیزی که ما در نرم افزار شاهد آن هستیم، محتواها به گویش انگلیسی و فرانسوی خواهند بود.
در نرم افزار نویسی ، چیزی که یک گسترش دهنده عالی را از یک بسط دهنده خوب متمایز می نماید ، روشی میباشد که هر مورد از آنان از ابزارهای اپلیکیشن نویسی توسعه یافته ای که گویش متبوع در دست آنها قرار میدهد طراحی اپلیکیشن در مشهد ، استعمال می کنند. Objective-C ، لهجه قانونی برای گسترش نرم افزار آیفون ، آیپد و Mac Operating System میباشد و یک لهجه چند کاربردی ، مربوط به C و بسیار قدرتمندی میباشد. پیشرفت دهندگان مبتدی ، در هنگام استارت عمل با Objective-C ، مفاد بخش اعظمی را برای جستجو داراهستند. با این درحال حاضر ، برنامه نویس ها حرفهای نیز مدام با برخی چیزهای تازه برای یادگیری مواجه میباشند ، به این دلیلکه این گویش از قابلیت و امکان های های نرمافزار نویسی بخش اعظمی دفاع می نماید. یک کدام از این خصوصیات ، توان کدنویسی با استعمال از بلوک ها (Block) میباشد.
بلوک ها ، کشف جدیدی در نرمافزار نویسی Objective-C نیستند. آنها در بقیه لهجه های نرمافزار نویسی نیز وجود داراهستند (مانند JavaScript) که با عنوان ها دیگری مانند ، Closure ها شناخته میگردند. در iOS ، بلوک ها نخستین دفعه در نسخه 4.0 معرفی شدند و از آن فرصت به شدت گزینه اعتنا و استعمال قرار گرفتند. در ورژن های آجل iOS ، اپل متدهای قاب ورک بخش اعظمی را دستکاری یا این که آپدیت رسانی نمود تا با بلوک ها همخوانی یابند ، و این طور به حیث میرسد که بلوک ها ، بخشی از مسیر بعدی کدنویسی باشند. البته حقیقتاً بلوک ها چه چیزی میباشند؟
عالی ، یک بلوک امکان self-contained دارااست و به طور کد غیروابسته است ، و مدام در باطن محدوده ساختار اپ نویسی دیگری مانند بدنه یک اسلوب وجود داراست. کدهای یک بلوک میتوانند با دنیای فارغ آن تعامل داشته باشند ، البته چیزی که در درون بلوک قراردارد قابل رؤیت برای محدوده سوا آن وجود ندارد. هم اینگونه ، بلوک ها میتوانند مقادیر متغیرهای که فارغ بدنه آن ها قرار داراهستند را با به کار گیری از یک شیوه خاص تغییر و تحول دهند (بعداً دربارهی این قضیه مطالب بیشتری ارائه خوا هیم کرد). بلوک ها دو خصوصیت گران قدر داراهستند:
بلوک ها میتوانند در طول دیگری ایفا شوند ، خیر صرفا الزاماً در هنگامی که کد محدوده آنها در حالا ایفا شدن می باشند.
کاربرد آن ها در غایت باعث به تایپ کردن کد بسیار تمیزتر و دقیقتر میشود ؛ چون میتوانند به مکان متدهای نماینده آیتم به کار گیری قرار گیرند ، صرفا در یک جا نوشته می گردند و در فولدر های متعددی توسعه نمی یابند.
با دقت به خصوصیت دوم ، بلوک ها میتوانند راهحل خیر و خوبی برای ساخت callback ها به مکان نمایندگان مهیا نمایند ، چون آنان به صورت بی واسطه در نقطه ای از کد که فراخوانی گردیده اند ، اعلام و طراحی می گردند. با استعمال از بلوک ها ، نیازی به تولید سازش با پروتکل ها ، یا این که طراحی متدهای نماینده وجود ندارد که سبب به کدنویسی بخش اعظمی در درون یک کلاس می گردند. با این هم اکنون ، شایسته ترین کاربرد بلوک ها این میباشد که ، خط مش callback میتواند به صورت بدون واسطه به هر متغیر جان دار در محدوده ای که بلوک در آنجا تعریف و تمجید شدهاست ، دسترسی داشته و استعمال کند. براین اساس ، دیگر نیازی به جابجایی اطلاعاتی مانند متدهای callback وجود ندارد. با این حالا ، بلوک ها نمی توانند تماما جایگزین نمایندگان شوند ، چون نمی توانند برای هر منظوری به کار گیری شوند. شایسته ترین نحوه این میباشد که ترکیبی از هر دو را داشته باشیم که میتوانند با تبعیت از بعضی مقررات بی آلایش و با استعمال از تجارب های به دست آمده در حین مجال ، نتیجه ها شوند.
بلوک ها object هایی میباشند که میتوانند در ساختار داده های NSArray و NSDictionary ذخیره گردیده و هم اینگونه ، به متغیرها اختصاص داده شوند.
دو حقیقت وجود داراست که هر بسط دهنده ای دربارهی آن ها اعتقاد و باور دارااست ، حتی در صورتیکه درباره بلوک ها هیچ نظری نداشته باشد. نخستین این که ، هر کسی از بلوک ها به کارگیری کرده است ، حتی در صورتیکه از این مسئله اگاهی نداشته باشد. چون ، اپل بلوک ها را به صورت ویژه تحت عنوان دستیارهای تکمیلی برای اکثری از متدهای اساسی و پرکاربرد قرار داده میباشد. دوم این که ، خوشبختانه یا این که متأسفانه ، نیازی به داشتن علم عمیقی در اپلیکیشن نویسی بلوک ها جهت به کار گیری از آن ها مایحتاج وجود ندارد ، کافی میباشد که درکی از کیفیت کارایی آن ها وجود داشته باشد.
بلوک ها تنها یک خصوصیت خارق العاده داراهستند ، و این به عبارتی روش ای میباشد که نوشته می گردند. در حالتی که با این مباحث نا آشنا می باشید ، نگران نباشید ، چون پس از یکسری روز استعمال و تایپ کردن بلوک ها ، در به کار گیری از آنان مانند هر چیز دیگری در Objective-C مهارت خواهید یافت.
دراین یادگرفتن ، ما دو مقصود را دنبال خوا هیم کرد: برای پرنور شدن تک تک مطالب ، از کدهای مربوطه به کار گیری خواهیم نمود، و فراتر از همگی برای آرم دادن این که چهگونه میتوانیم در فعالیت از بلوک ها به کار گیری نماییم ، از نمونه های عملی به کار گیری خوا هیم کرد تا یادگیری شما ریلکس خیس صورت بپذیرد. در حالتی که تا به امروز اپ نویسی بلوک ها را اعمال نداده اید ، بعد از نقطه پایان این فراگیری ، آغاز به اجرا این عمل خواهید نمود.
پس به تلاوت این نوشتهعلمی ادامه دهید تا با مطالب دیدنی و جذابی آشنا گردید.
بازبینی اپلیکیشن
نرم افزار آزمایشی که ما برای هدف ها آموزشی خوا هیم ایجاد کرد ، مشمول تعدادی نصیب میباشد که غیروابسته از یکدیگر می باشند. در واقع ، میتوانیم یک نرم افزار command-line طراحی نماییم ، ولی ، از آن جایی که میخواهیم برخی UI مربوط به محتوا را نشانه دهیم ، یک نرمافزار بسیار بی آلایش را خواهیم ایجاد کرد. پیش از کلیه ، قصد داریم کدهایی بنویسیم که پیام هایی را تنها در debugger نماد میدهند ، فارغ از این که هیچ رابط کاربری خاصی برای آن ها بسازیم. از آن جایی که میخواهیم در شغل تشکیل داد اولین بلوک خویش تمرکز نماییم ، لذا قسمت های نرم افزار مشتمل بر یک سری نمونه خرد است که در آنها تنها به حاصل رجوع و برگشت داده گردیده دقت میکنیم. با این اکنون ، از آن جایی که قصد داربم بعضا از task های مربوط به view را جاری ساختن دهیم و میخواهیم که نرم افزار ما تعامل UI را مهیا کند ، از این رو ، بعضی از رابط های کاربری را نیز خوا هیم تشکیل داد. اساسی خیس از کلیه این میباشد که هر قسمت از نرمافزار ما بر روی طرز دیگری از به کار گیری از بلوک ها تمرکز خواهد کرد ، از این رو ، تکنیک های مفیدی در کار علامت داده خواهند شد.