আইওএস 9 স্টোরিবোর্ডটি হ্যান্ডেলড অ্যাকশন (হ্যান্ডেলনলানচস্পিফিকেশন) কী?


84

স্টোরিবোর্ড ব্যবহার করার সময় আইওএস 9-এ আমার অ্যাপটি চালানোর সময় কনসোলে পপ আপ করতে নিম্নলিখিত ত্রুটিটি লক্ষ্য করেছি। আমি এক্সকোড 7 ব্যবহার করছি। এই যে আমার সম্পর্কে উদ্বিগ্ন হওয়া দরকার?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

অ্যাপল বলেছে যে আইওএস 9 স্থিতিশীলতার বিষয়ে, সুতরাং আমি অনুমান করি আপনার চিন্তা করা উচিত নয় ;-) পিএস আমার একই সমস্যা আছে এবং অন্য কিছু দেবও খুব স্ট্যাকওভারফ্লো
রোমা

11
এটি স্টোরিবোর্ডের সাথে সম্পর্কিত কিনা তা নিশ্চিত নই, আমি এটি আমার অ-স্টোরিবোর্ড অ্যাপেও দেখতে পাচ্ছি।
Koen

বিল্ড অন্য কোন সতর্কতা আছে? হতে পারে এটি একটি সতর্কতা যা তুচ্ছ মনে হয়?
জো সুজনিক

আমি স্টোরিবোর্ড ব্যবহার করছি না এবং এই সতর্কতাটিও পেয়ে যাচ্ছি। আপনি যখন সিএমডি + এল দিয়ে সিমুলেটরটি লক করেন এবং তারপরে অ্যাপ্লিকেশনটিতে ফিরে আসার জন্য "আনলক করতে স্লাইড করুন" তখন পপ আপ হয়।
এসডাব্লু

ডিভাইস লগটি দেখে, এটির সাথে ডিভাইসের স্ক্রিনটি স্বয়ংক্রিয়ভাবে বন্ধ করে দেওয়ার কিছু করতে পারে। SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.উদ্ধৃত ত্রুটি বার্তার ঠিক আগে লাইনটি লগ করা হয়।
খ্রিস্টান

উত্তর:


32

আপনার কোডে কোনও ভুল নেই। এটি অ্যাপলের অভ্যন্তরীণ লগিং বার্তা, এবং আপনার এটি সম্পর্কে একটি রাডার ফাইল করা উচিত।

দুটি ইঙ্গিত রয়েছে যা দেখায় যে এটি সম্ভবত অ্যাপলের কোড:

  1. পদ্ধতির নামটির নেতৃত্বাধীন আন্ডারস্কোরটি _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionএকটি কনভেনশন যা এটি নির্দেশ করে যে পদ্ধতিটি শ্রেণীর মধ্যে ব্যক্তিগত / অভ্যন্তরীণ বলে ঘোষণা করা হয়েছে in ( এই মন্তব্যটি দেখুন ))

  2. এটি অনুমান করা যুক্তিসঙ্গত যে দুটি অক্ষরের উপসর্গটি FBSSceneSnapshotActionফ্রন্টবোর্ডের জন্য সংক্ষিপ্তরূপ, যা " আইওএস 9 ইচ্ছার-তালিকা: অতিথি মোড" এ অ্যাপ্লিকেশন প্রবর্তন সম্পর্কিত সফ্টওয়্যারটির পুরো পরিবারের অংশ:

আইওএস 8 এর সাহায্যে অ্যাপল তার সিস্টেম ম্যানেজার, স্প্রিংবোর্ডকে বেশ কয়েকটি ছোট, আরও বেশি কেন্দ্রীভূত উপাদানগুলিতে রিফ্যাক্ট করেছে। ব্যাকবোর্ড ছাড়াও, যা পটভূমির কাজগুলি পরিচালনা করার জন্য ইতিমধ্যে ছড়িয়ে পড়েছিল, তারা অগ্রভাগের কাজের জন্য ফ্রন্টবোর্ড যুক্ত করেছিল। তারা সুরক্ষিত, এনক্রিপ্ট হওয়া শর্তে লক স্ক্রিনটি পরিচালনা করতে প্রি-বোর্ডকে যুক্ত করেছে। [...]

BSউপসর্গটি কীসের জন্য রয়েছে তা আমার কোনও ধারণা নেই BSSettingsতবে

BSসংক্ষিপ্তরূপে BackBoard Settings, এবং এই লগ বার্তাটির বিশ্লেষণ ইঙ্গিত দেয় যে এটি আপনার করা কিছু নয়, এবং লগিং বার্তাটি পুনরুত্পাদন করার পদক্ষেপ সহ আপনার একটি রাডার ফাইল করা উচিত।

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

সম্পাদনা:

তবে, আমরা এখনও জানতে চাই যে এই ক্রিয়াটি কী। সুতরাং আমি একটি ব্রেকপয়েন্ট রেখেছি -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]এবং নিবন্ধকের মানগুলি মুদ্রণ করতে শুরু করেছি এবং একটি ক্লাস পেয়েছি FBSceneImplযা আমার অ্যাপ্লিকেশন সম্পর্কে পুরো গোটা তথ্য ছিল:

দৃশ্য

পরবর্তী কোন ব্যক্তিগত পদ্ধতিটি বলা হয় তা আমরা খুঁজে পেতে সক্ষম হয়েছি ( প্রোগ্রামের কাউন্টারে সঞ্চিত , নির্দেশ নির্দেশক, নিবন্ধন 15)

প্রোগ্রাম কাউন্টার

আমি FBSceneSnapshotActionলগে আন-হ্যান্ডেলযুক্ত রেফারেন্সগুলি সন্ধান করার চেষ্টা করেছি , তবে কোনও ডাইস নেই। তারপরে, আমি ইউআইএপ্লিকেশনটি সাবক্লাস করেছি এবং ওভাররড করেছি _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion। এখন আমি সরাসরি অ্যাকশনটিতে পেতে সক্ষম হয়েছি, তবে এখনও, আমরা এটি জানি না।

তারপরে, আমি আবার এফবিএসসিনস্পটঅ্যাকশনটির দিকে তাকালাম। দেখা যাচ্ছে এটির একটি সুপারক্লাস রয়েছে BSAction

তারপরে আমি রানটাইমব্রোজারের মতো একটি সরঞ্জাম লিখেছি এবং বিএসএকশনের সমস্ত সাবক্লাসটি সন্ধান করেছি। দেখা যাচ্ছে যে তাদের বেশ কয়েকটি তালিকা রয়েছে:

কার্য তালিকা

আমাদের কাছে দুটি পদ্ধতির নাম রয়েছে (একটি লগ থেকে এবং একটি ডিভাইসে প্রোগ্রামের কাউন্টার থেকে) বোঝায় যে এই ক্রিয়াগুলি হুডের নীচে সিস্টেমের চারপাশে অ্যাকশনগুলি পাস করার জন্য ব্যবহৃত হয়।

কিছু ক্রিয়া সম্ভবত অ্যাপের প্রতিনিধিটির কলব্যাকগুলিতে প্রেরণ করা হয়, অন্যদিকে অভ্যন্তরীণভাবে পরিচালিত হয়।

এখানে যা ঘটছে তা হ'ল এমন একটি ক্রিয়া রয়েছে যা সঠিকভাবে পরিচালনা করা হয়নি এবং সিস্টেম এটি লক্ষ্য করছে। আমাদের এটি দেখার কথা ছিল না, স্পষ্টতই।


চমৎকার তদন্ত কিন্তু এখানে আকর্ষণীয় কিছু, ব্যক্তিগত অ্যাপল এপিআই ব্যবহার করার সময় আমি ঠিক ওপি ত্রুটি পাচ্ছি। আমার ধারণা, যেহেতু আমি প্রাইভেট এপিআই ব্যবহার করছি তখন আমি সম্ভবত অ্যাপল ইঞ্জিনিয়ারদের জন্য কনসোল লগ পাচ্ছি।
ওহাদএম

4
@ মোশে তাদের পক্ষে তদন্তের জন্য অ্যাপল আপনাকে কত মূল্য দিয়েছে? তবে তারা এতে আগ্রহী নাও হতে পারে। : পি
কোডের্নার

"এটি সম্পর্কে একটি রাডার ফাইল করা" এর অর্থ কী?
পল মাস্রি-স্টোন 21

এর অর্থ অ্যাপলের বাগ রিপোর্টার সরঞ্জামটি দিয়ে একটি বাগ রিপোর্ট ফাইল করা।
মোশে

12

আফাইক, উপরের তথ্যটি আইওএসের সাথে স্ক্রিন্যাপের সময় সম্পর্কিত (আমি মনে করি ডাবল ক্লিক হোম মাল্টিটাস্ক সম্পর্কিত আচরণের জন্য) ।আমি আমার অ্যাপ্লিকেশনটি গভীরভাবে তদন্ত করেছি এবং মনে হয় এটি কোনও পাশের আচরণ পায় না get আপনি আপাতত এটি নিরাপদে উপেক্ষা করতে পারেন।

উপরের ফাংশনটির কলগুলির বিরুদ্ধে নিজেকে পরীক্ষা করতে আপনি নীচের টুকরোটি সহজ বিভাগটি ব্যবহার করতে পারেন :


1

আমি এটি সন্ধান করেছি, এটি তখন ঘটবে যখন আপনি .H বা .m ফাইলে আইবিএশন পদ্ধতি ঘোষিত হয়েছিলেন তবে আপনি এটি কোনও নিয়ন্ত্রণে আবদ্ধ করেননি।

.ম উদাহরণ:

- (IBAction)click:(id)sender{
}

তবে স্টোরিবোর্ডের কোনও নিয়ন্ত্রণের জন্য এই পদ্ধতিটি বরাদ্দ করা হয়নি।


এটি আমার অ্যাপ্লিকেশনটির ক্ষেত্রে নয় - আমার কোনও আনবাউন্ড আইবিএঅ্যাকশন নেই, এবং আমি এই বার্তাটিও পেয়েছি। যদিও আমার অ্যাপ্লিকেশনটি একটি সুইফট অ্যাপ।
henrikstroem

1

এটি আমার অ্যাপ্লিকেশনটিতে কেন হয় তা সন্ধান করতে পারেননি তবে আপনি যদি লগ ফলকে এই পপিং আপ থেকে রক্ষা করতে চান তবে কমপক্ষে আপনি ব্যতিক্রমটি ধরতে পারেন। এটি কোনও সমাধান নয়, তবে এটি আপনাকে আরও অন্তর্দৃষ্টি দিতে পারে কেন ক্যাচটিতে পাস হওয়া কোনও যুক্তি পর্যবেক্ষণ করে কেন এটি সুখী।

সুইফট 2 সংস্করণ:

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.