আপডেট 1/12/2016 : এটি ২০১ 2016 এবং আমি এখনও স্টোরবোর্ডগুলিতে নয় বরং কোডগুলিতে আমার ইউআই রাখার পছন্দ করি। বলা হচ্ছে, স্টোরিবোর্ডগুলি অনেক দূর এগিয়েছে। আমি এই পোস্ট থেকে সমস্ত পয়েন্ট মুছে ফেলেছি যা কেবল 2016 এ আর প্রয়োগ হয় না।
আপডেট 4/24/2015 : আকর্ষণীয়ভাবে অ্যাপল এমনকি তাদের সম্প্রতি খোলা সর্বাধিক গবেষণা গবেষণা স্টোরিবোর্ডগুলি ব্যবহার করে না যেমন পিটার স্টেইনবার্গার লক্ষ্য করেছেন ("ইন্টারফেস বিল্ডার" শিরোনামের অধীনে)।
আপডেট 6/10/2014 : প্রত্যাশিত হিসাবে, অ্যাপল স্টোরিবোর্ড এবং এক্সকোড উন্নত করে। আইওএস 7 এবং নীচে প্রয়োগ করা কিছু পয়েন্টগুলি আইওএস 8-র ক্ষেত্রে আর প্রয়োগ হয় না (এবং এখন এটিরূপে চিহ্নিত হয়েছে)। সুতরাং স্টোরিবোর্ডগুলির অন্তর্নিহিত এখনও ত্রুটিগুলি থাকা অবস্থায়, আমি আমার পরামর্শটি যেখানে সঠিকভাবে বোঝায় সেগুলি বেছে বেছে ব্যবহার করার জন্য ব্যবহার না করা থেকে সংশোধন করি ।
এমনকি এখন যদিও আইওএস 9 শেষ হয়েছে, আমি পরামর্শ দেব বিরুদ্ধেস্টোরিবোর্ডগুলি ব্যবহার করবেন কিনা তা সিদ্ধান্ত নেওয়ার সময় সতর্কতা অবলম্বন করা। আমার কারণগুলি এখানে:
স্টোরিবোর্ডগুলি রানটাইমের সময় ব্যর্থ হয়, সংকলনের সময় নয় : আপনার কোনও সেগু নামে টাইপ আছে বা আপনার স্টোরিবোর্ডে এটি ভুলভাবে সংযুক্ত হয়েছে? রানটাইমে এটি ফুরিয়ে যাবে। আপনি একটি কাস্টম ইউআইভিউকন্ট্রোলার সাবক্লাস ব্যবহার করেন যা আপনার স্টোরিবোর্ডে আর বিদ্যমান নেই? রানটাইমে এটি ফুরিয়ে যাবে। আপনি যদি কোডগুলিতে এই জাতীয় জিনিসগুলি করেন, আপনি সংকলনের সময় তাড়াতাড়ি এগুলি ধরবেন। আপডেট : আমার নতুন সরঞ্জাম স্টোরিবোর্ডলিন্ট বেশিরভাগ ক্ষেত্রেই এই সমস্যাটি সমাধান করে।
স্টোরিবোর্ডগুলি দ্রুত বিভ্রান্ত হয় : আপনার প্রকল্পটি বাড়ার সাথে সাথে আপনার স্টোরিবোর্ডটি নেভিগেট করা আরও ক্রমশ আরও কঠিন হয়ে যায় difficult এছাড়াও, যদি একাধিক ভিউ কন্ট্রোলারগুলির একাধিক অন্যান্য ভিউ কন্ট্রোলারগুলিতে একাধিক বিভাজন থাকে, আপনার স্টোরিবোর্ডটি দ্রুত স্প্যাগেটির বাটির মতো দেখতে শুরু করবে এবং আপনি যে ভিউ কন্ট্রোলারটি খুঁজছেন তা সন্ধানের জন্য আপনি নিজেকে জুম ইন এবং আউট এবং সমস্ত জায়গায় স্ক্রোল করতে দেখবেন find জন্য এবং কি segue পয়েন্ট কোথায় তা খুঁজে বের করার জন্য। আপডেট : এই সমস্যা বেশিরভাগই বর্ণনা অনুযায়ী, বিভাজন আপনার স্টোরিবোর্ড আপ সমাধান করা যেতে পারে একাধিক Storyboards মধ্যে Pilky দ্বারা এই নিবন্ধটি এবং রবার্ট ব্রাউন দ্বারা এই নিবন্ধটি ।
স্টোরিবোর্ডগুলি একটি দলে কাজ করা আরও শক্ত করে তোলে : কারণ আপনার প্রকল্পের জন্য সাধারণত আপনার কাছে একটি বিশাল স্টোরিবোর্ড ফাইল থাকে, একাধিক বিকাশকারী নিয়মিতভাবে সেই ফাইলটিতে পরিবর্তন আনতে মাথা ব্যথা হতে পারে: পরিবর্তনগুলিকে একীভূত করতে হবে এবং বিরোধগুলি সমাধান করা দরকার। যখন কোনও বিরোধ দেখা দেয়, তখন কীভাবে সমাধান করবেন তা বলা শক্ত: এক্সকোড স্টোরিবোর্ড এক্সএমএল ফাইল উত্পন্ন করে এবং এটি এমন লক্ষ্যকে সামনে রেখেই তৈরি করা হয়নি যে কোনও মানুষকে পড়তে হবে, একে একে সম্পাদনা করতে দিন।
স্টোরিবোর্ডগুলি কোড রিভিউগুলিকে কঠিন বা প্রায় অসম্ভব করে তোলে : পিয়ার কোড পর্যালোচনাগুলি আপনার দলে করা একটি দুর্দান্ত জিনিস। যাইহোক, আপনি যখন স্টোরিবোর্ডে পরিবর্তন করেন, তখন কোনও ভিন্ন বিকাশকারী দিয়ে এই পরিবর্তনগুলি পর্যালোচনা করা প্রায় অসম্ভব। আপনি যেগুলি টানতে পারবেন তা হ'ল একটি বিশাল এক্সএমএল ফাইলের আলাদা। সত্যিকার অর্থে কী পরিবর্তন হয়েছে এবং যদি সেই পরিবর্তনগুলি সঠিক হয় বা তারা কিছু ভেঙে দেয় তবে তা সত্যই শক্ত।
স্টোরিবোর্ডগুলি কোডের পুনরায় ব্যবহারে বাধা দেয় : আমার আইওএস প্রকল্পগুলিতে, আমি সাধারণত একটি ক্লাস তৈরি করি যা সমস্ত অ্যাপ্লিকেশন জুড়ে আমি সমস্ত বর্ণ এবং ফন্ট এবং মার্জিন এবং ইনসেটগুলিকে ধারণ করে যা এটি একটি ধারাবাহিক বর্ণন এবং অনুভূতি দেয়: এটি যদি আমার এক লাইনের পরিবর্তন হয় তবে পুরো অ্যাপ্লিকেশনের জন্য সেই মানগুলির মধ্যে যে কোনও একটি সমন্বয় করুন। আপনি যদি স্টোরিবোর্ডে এই জাতীয় মানগুলি সেট করেন, আপনি সেগুলি সদৃশ করুন এবং যখন আপনি সেগুলি পরিবর্তন করতে চান তখন প্রতিটি একক ঘটনা খুঁজে পেতে হবে। সম্ভাবনা বেশি যে আপনি একটি মিস করেছেন, কারণ স্টোরিবোর্ডগুলিতে কোনও অনুসন্ধান এবং প্রতিস্থাপন নেই।
স্টোরিবোর্ডগুলিকে ধ্রুবক প্রসঙ্গের স্যুইচগুলির প্রয়োজন : আমি নিজেকে স্টোরিবোর্ডের তুলনায় কোডে আরও দ্রুত কাজ করে এবং নেভিগেট করতে দেখি। যখন আপনার অ্যাপ স্টোরিবোর্ড ব্যবহার করে, আপনি ক্রমাগত আপনার প্রসঙ্গটি স্যুইচ করেন: "ওহ, আমি অন্য ভিউ কন্ট্রোলারটি লোড করার জন্য এই টেবিল ভিউ সেলটিতে একটি ট্যাপ চাই I আমাকে এখন স্টোরিবোর্ডটি খুলতে হবে, সঠিক দর্শন নিয়ামকটি খুঁজে বের করতে হবে, একটি নতুন সেগু তৈরি করতে হবে অন্যান্য ভিউ কন্ট্রোলারের কাছে (যা আমারও সন্ধান করতে হবে), সেগুকে একটি নাম দিন, সেই নামটি মনে রাখবেন (স্টোরিবোর্ডগুলিতে আমি কনস্ট্যান্ট বা ভেরিয়েবল ব্যবহার করতে পারি না), কোডটিতে ফিরে যান এবং আশা করি আমি এর নামটি ভুল টাইপ করব না যেটি আমার প্রস্তুতির জন্য সেগু পদ্ধতিটির জন্য সেগমেন্ট। আমি কীভাবে ইচ্ছা করি আমি যেখানেই আছি ঠিক সেখানে 3 লাইন কোড টাইপ করতে পারতাম! " না, এটা মজা নয়। কোড এবং স্টোরিবোর্ডের মধ্যে (এবং কীবোর্ড এবং মাউসের মধ্যে) স্যুইচিং পুরানো দ্রুত হয়ে যায় এবং আপনাকে ধীর করে দেয়।
স্টোরিবোর্ডগুলি রিফ্যাক্টর করা শক্ত : আপনি যখন নিজের কোডটি রিফেক্টর করেন, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে এটি এখনও আপনার স্টোরিবোর্ডের প্রত্যাশার সাথে মেলে। আপনি যখন আপনার স্টোরিবোর্ডে জিনিসগুলি ঘুরে দেখেন, আপনি কেবল রানটাইমে খুঁজে পাবেন যদি তা এখনও আপনার কোড সহ কাজ করে। এটি আমার কাছে মনে হয় যেন দুটি পৃথিবী সিঙ্ক করে রাখতে হয়। এটি ভঙ্গুর বোধ করে এবং আমার নম্র মতামতকে হতাশ করে।
স্টোরিবোর্ডগুলি কম নমনীয় : কোডে আপনি মূলত যা কিছু করতে পারেন! স্টোরিবোর্ডগুলির সাহায্যে আপনি কোডে কী করতে পারেন তার একটি উপসেট সীমাবদ্ধ। বিশেষত যখন আপনি অ্যানিমেশন এবং ট্রানজিশনগুলির সাথে কিছু উন্নত জিনিস করতে চান আপনি এটিকে কাজে লাগানোর জন্য নিজেকে "স্টোরিবোর্ডের সাথে লড়াই" করতে দেখবেন।
Storyboards দেবেন না আপনি বিশেষ দৃশ্য কন্ট্রোলার ধরণ পরিবর্তন : আপনি একটি পরিবর্তন করতে চান UITableViewController
একটি মধ্যে UICollectionViewController
? না কোনও সমতলে UIViewController
? স্টোরিবোর্ডে সম্ভব নয়। আপনাকে পুরানো ভিউ কন্ট্রোলারটি মুছতে হবে এবং একটি নতুন তৈরি করতে হবে এবং সমস্ত বিভাগগুলি পুনরায় সংযুক্ত করতে হবে। কোডে এমন পরিবর্তন করা অনেক সহজ।
স্টোরিবোর্ডগুলি আপনার প্রকল্পে দুটি অতিরিক্ত দায় যুক্ত করে : (1) স্টোরিবোর্ড সম্পাদক সরঞ্জাম যা স্টোরিবোর্ড এক্সএমএল উত্পন্ন করে এবং (2) রানটাইম উপাদান যা এক্সএমএলকে বিশ্লেষণ করে এবং এটি থেকে ইউআই এবং নিয়ামক অবজেক্ট তৈরি করে। উভয় অংশে বাগ থাকতে পারে যা আপনি ঠিক করতে পারবেন না।
স্টোরিবোর্ডগুলি আপনাকে একটিতে একটি সংক্ষিপ্তসার যোগ করতে দেয় নাUIImageView
: কে কেন জানে।
স্টোরিবোর্ডগুলি আপনাকে স্বতন্ত্র ভিউ (-কন্ট্রোলার) এর জন্য অটো লেআউট সক্ষম করতে দেয় না: স্টোরিবোর্ডে অটো লেআউট বিকল্পটি চেক / চেক করে স্টোরিবোর্ডে সমস্ত নিয়ন্ত্রককে পরিবর্তন প্রয়োগ করা হয়। (এই দফার জন্য সাভা মাজারকে ধন্যবাদ!)
স্টোরিবোর্ডগুলির পিছনে সামঞ্জস্যতা ভাঙার উচ্চ ঝুঁকি রয়েছে : এক্সকোড কখনও কখনও স্টোরিবোর্ড ফাইলের ফর্ম্যাট পরিবর্তন করে এবং কোনওভাবেই গ্যারান্টি দেয় না যে আপনি আজ থেকে কয়েক বছর বা কয়েক মাস পরে তৈরি করেছেন স্টোরিবোর্ড ফাইলগুলি খুলতে সক্ষম হবেন। (এই বিষয়টির জন্য চিন্তাভাবনার জন্য ধন্যবাদ। মূল মন্তব্য দেখুন )
স্টোরিবোর্ডগুলি আপনার কোডটিকে আরও জটিল করে তুলতে পারে : আপনি যখন কোডটিতে আপনার ভিউ কন্ট্রোলার তৈরি করেন, আপনি পছন্দসই init
পদ্ধতিগুলি তৈরি করতে পারেন , উদাহরণস্বরূপ initWithCustomer:
। এইভাবে, আপনি customer
আপনার ভিউ কন্ট্রোলারের অভ্যন্তরটিকে অপরিবর্তনীয় করে তুলতে পারেন এবং নিশ্চিত করতে পারেন যে কোনও দৃশ্য ছাড়াই এই দর্শন নিয়ামকটি তৈরি করা যায় না customer
। স্টোরিবোর্ডগুলি ব্যবহার করার সময় এটি সম্ভব নয়। prepareForSegue:sender:
পদ্ধতিটি কল করার জন্য আপনাকে অপেক্ষা করতে হবে এবং তারপরে আপনাকে customer
সম্পত্তিটি আপনার ভিউ কন্ট্রোলারের উপর সেট করতে হবে , যার অর্থ আপনাকে এই সম্পত্তিটি পরিবর্তনযোগ্য করে তুলতে হবে এবং আপনাকে কোনও customer
বস্তু ছাড়াই ভিউ কন্ট্রোলার তৈরি করার অনুমতি দিতে হবে । আমার অভিজ্ঞতায় এটি আপনার কোডটিকে ব্যাপকভাবে জটিল করে তুলতে পারে এবং আপনার অ্যাপ্লিকেশনটির প্রবাহ সম্পর্কে যুক্তিযুক্ত করে তোলে। আপডেট 9/9/16: ক্রিস জজম্বাক একটি লিখেছিলেনএই সমস্যা সম্পর্কে দুর্দান্ত নিবন্ধ ।
এটি ম্যাকডোনাল্ডস : মাইক্রোসফ্ট সম্পর্কে স্টিভ জবসের ভাষায় এটি বলতে: এটি ম্যাকডোনাল্ডের (ভিডিও) !
স্টোরিবোর্ডগুলির সাথে কাজ করা কেন আমি সত্যিই পছন্দ করি না তার জন্য এইগুলি আমার কারণ। এর কয়েকটি কারণ XIB- তেও প্রযোজ্য। আমি যে স্টোরিবোর্ড-ভিত্তিক প্রকল্পগুলিতে কাজ করেছি সেগুলিতে তারা আমার সঞ্চয় করেছে তার চেয়ে অনেক বেশি সময় ব্যয় করেছে এবং তারা সহজ করার পরিবর্তে জিনিসগুলি আরও জটিল করে তুলেছে।
আমি যখন কোডটিতে আমার ইউআই এবং অ্যাপ্লিকেশন প্রবাহ তৈরি করি তখন যা চলছে তার নিয়ন্ত্রণে আমি আরও অনেক বেশি থাকি, এটি ডিবাগ করা সহজ, তাড়াতাড়ি ভুলগুলি চিহ্নিত করা সহজ, অন্য বিকাশকারীদের কাছে আমার পরিবর্তনগুলি ব্যাখ্যা করা আরও সহজ এবং এটি আইফোন এবং আইপ্যাড সমর্থন সহজ।
তবে আমি সম্মত হই যে কোডটিতে আপনার সমস্ত ইউআই রেখে দেওয়া প্রতিটি প্রকল্পের জন্য এক-আকারের ফিট-সব সমাধান নাও হতে পারে। যদি আপনার আইপ্যাড ইউআই নির্দিষ্ট জায়গায় আপনার আইফোন ইউআই থেকে অনেক বেশি পৃথক হয়, তবে কেবলমাত্র সেই অঞ্চলগুলির জন্য একটি এক্সআইবি তৈরি করা বুদ্ধিমান হতে পারে।
উপরে বর্ণিত অনেকগুলি সমস্যা অ্যাপল দ্বারা সমাধান করা যেতে পারে এবং আমি আশা করি তারা এটি করবে।
শুধু আমার দুই সেন্ট।
আপডেট : এক্সকোড 5-এ অ্যাপল স্টোরিবোর্ড ছাড়াই একটি প্রকল্প তৈরির বিকল্পটি সরিয়ে নিয়েছে। আমি একটি ছোট স্ক্রিপ্ট লিখেছি যা Xcode 4 এর টেমপ্লেটগুলি (স্টোরিবোর্ড-অপ্ট-আউট বিকল্প সহ) Xcode 5 তে পোর্ট করে: https://github.com/jfahrenkrug/Xcode4templates