পপওভার এখনও দৃশ্যমান অবস্থায় ইউআইপিপওভারকন্ট্রোলার ডিঅলোক পৌঁছেছে


111

আমি আপনাকে আশ্বাস দিচ্ছি যে আমি আমার প্রশ্নের জন্য উত্তরটির সন্ধান করেছি কিন্তু তাদের কোনওটিই সহায়ক ছিল না। এখানে আমি একটি সহজ কোডটি উপহার উচিত পেয়েছিলাম UIImagePickerControllerএকটি মধ্যে UIPopoverController:

-(void)takePicture:(id)sender{
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing=YES;
UIPopoverController *poc=[[UIPopoverController alloc] 
                            initWithContentViewController:picker];
[poc presentPopoverFromBarButtonItem:bbItem 
            permittedArrowDirections:UIPopoverArrowDirectionAny
                            animated:NO];
}

এখন, প্রথম বার থেকেও আমি [UIPopoveController dealloc]পৌঁছানোর সময় ... ত্রুটি এবং প্রোগ্রামটি ক্র্যাশ হয়ে গেছে। আমি আরসি অনুসারে কোনও রক্ষণ, সম্পর্কিত বা স্বতঃসংশ্লিষ্ট কাজ করছি না। UIPopoverControllersএআরসি থেকে উপকৃত হওয়ার সাথে সাথে কি কোনও বিশেষ বিবেচনা রয়েছে ?

উত্তর:


203

UIPopoverControllers সর্বদা একটি ইভেন্ট ভেরিয়েবলের মধ্যে রাখা উচিত। এটির জন্য একটি শক্তিশালী সম্পত্তি তৈরি করা একটি ভাল অনুশীলন।

হালনাগাদ:

আইওএস 8 হিসাবে আপনার ব্যবহার করা উচিত UIPopoverPresentationController। তারপরে আপনাকে পপওভারের একটি রেফারেন্স রাখার দরকার নেই কারণ এটি উপস্থাপনা নিয়ামক দ্বারা পরিচালিত হয়।

কোড উদাহরণ (আইফোন এবং আইপ্যাড উভয়ই কাজ করে):

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing = YES;
picker.modalPresentationStyle = UIModalPresentationPopover;
UIPopoverPresentationController* popoverPC = picker.popoverPresentationController;
popoverPC.barButtonItem = bbItem;
popoverPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
[self presentViewController:picker animated:YES completion:nil];

1
আচ্ছা বুঝলাম. তবে এটি কি কোনও ইউআইএলআর্টভিউয়ের মতো নয়? আমার এর জন্য কখনই আইভার নেই, আমি যেখানেই প্রয়োজন সেখানে এটিকে ডিগ্রি বরাদ্দ করি, এটি দেখান এবং তারপরে [অভ্যস্ত] রিলিজ করি। পপওভারকন্ট্রোলার আলাদা কী?
মিকায়িল আবদুললেভ

17
@ মাইকেইল সতর্কতাটি তার তত্ত্বাবধানের সাথে ধরে রাখা হয়েছে (সমস্ত মতামত হিসাবে) তবে পপওভারকন্ট্রোলার একটি ভিউ নয়, তাই তদারকি নেই, তাই আপনি যদি এটি ধরে না রাখেন তবে কেউই ধরে রাখতে পারবেন না (বা এটিকে একটি শক্তিশালী ভেরিয়েবলে সঞ্চয় করুন যার সুযোগ রয়েছে বর্তমান পদ্ধতির চেয়ে দীর্ঘতর - উদাহরণস্বরূপ একটি আইভার)।
fzwo

1
তবে আমি এখনও ইউআইপিপভারকন্ট্রোলার ধরে রাখার গণনা সম্পর্কে বিভ্রান্ত। কারণ আমি বরাদ্দ দেওয়ার আগে এবং একটি দীক্ষা দেওয়ার আগে আমি একটি চেক রেখেছি। এবং কেবল যদি এটি হয় তবে আমি একটি নতুন বরাদ্দ করি। তবে প্রথমবারের জন্য বরাদ্দ দেওয়ার পরে আমি কখনই শূন্য হই না। মানে আমি একবারে কোনও পদ্ধতি কল করি। সেখানে আমি আমার ivar বরাদ্দ এবং দীক্ষা। এবং পরের বার যখন আমি আবার সেই পদ্ধতিটি কল করব তখন আমার আইভারটি ইতিমধ্যে বরাদ্দ পেয়েছে। যদি এআরসি এটির যত্ন নেয়, তবে এটি কখন প্রকাশ করে। নাকি এটি অটোরিলেজ করে?
মিকায়েল আবদুললেভ

@ মাইকায়েল আইভরগুলি এআরসি দ্বারা প্রকাশ করা হয় যখন অবজেক্টটি হ্রাস করা হয় বা আপনি যখন তা বাতিল করেন
ফেলিক্স

তবে তারা ডকুমেন্টেশনে এটি উল্লেখ করেনি, তারা স্থানীয় পরিবর্তনশীলটি কীভাবে ব্যবহার করবেন বিভাগে
অমিত বটান

11

যখন ফাংশনটি প্রস্থান করে তখন পপওভার নিয়ন্ত্রকের জন্য অন্য কোনও রেফারেন্স থাকে না, সুতরাং এটি খুব তাড়াতাড়ি deallocated।

পরিবর্তে এটি আপনার শ্রেণীর সদস্য হিসাবে যুক্ত করার চেষ্টা করুন।

টিম


এটি এখনও অবনমিত হওয়ার আগে কি আমি এখনও এটি দেখতে পাচ্ছি না?
মিকায়িল আবদুললেভ

10

@ ফিক্স 23 জবাব দিয়েছিল তা যুক্ত করে, * পোক সম্পত্তি তৈরি করুন:

@property (nonatomic, retain) IBOutlet UIPopoverController *poc;

এবং তারপর পরিবর্তন

UIPopoverController *poc = [[UIPopoverController alloc] 
                            initWithContentViewController:picker];

জন্য

self.poc = [[UIPopoverController alloc] 
                            initWithContentViewController:picker];

11
আপনাকে এটি আপনার .h ফাইলে রাখতে হবে না। এটি এটি সর্বজনীন করে তুলবে এবং আপনি এটি না চাইলে কেবল এটি আপনার .m ফাইলে একটি সম্পত্তি হিসাবে তৈরি করুন।
জোশুয়া ডান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.