সিমুলেটারে অ্যাপ আনইনস্টল করার পরে এনএসউসারডেফল্টগুলি সাফ করা হয়নি not


95

এটি বাস্তব NOOB শোনাতে পারে! আমি দ্বিতীয়বার ব্যবহারকারীর দ্বারা আমার অ্যাপ্লিকেশনটি প্রবেশ করানো হয়েছে কিনা তা যাচাই করতে চাই, তাই আমি যে রান ব্যবহার করছি তা চালিয়ে যেতে NSUserDefaults। আমি আমার মধ্যে নিম্নলিখিত কোড বাস্তবায়িত হয়েছে rootViewController'র viewDidLoadপদ্ধতি:

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);

    if ([userDefaults integerForKey:@"runCount"] != 1) {
        //not the 2nd run
        [userDefaults setInteger:1 forKey:@"runCount"];
        NSLog(@"not 2nd run");
    } else {
        //second run or more
        NSLog(@"2nd run");
    }

    [userDefaults synchronize];

সবকিছু ঠিকঠাক কাজ করে, তবে সমস্যাটি হ'ল আমি যখন এখানে এবং এখানে অনুসারে অ্যাপ্লিকেশনটি আনইনস্টল (মুছুন এবং পুনরায় ইনস্টল করবেন) তখন ডেটা সাফ করা উচিত, তবে এটি হয় না এবং অ্যাপটি পুনরায় ইনস্টল করার পরেও পূর্ববর্তী ডেটা এখনও প্রদর্শিত হচ্ছে। আমি xCode6-বিটা ব্যবহার করে এবং iOS 8 এ অ্যাপ্লিকেশনটিকে লক্ষ্য করে আইওএস সিমুলেটারে আমার অ্যাপটি চালাচ্ছি running


4
আপনি কি প্রকৃত ডিভাইসে পরীক্ষা করার চেষ্টা করেছেন?
হেনরি এফ

আপনাকে এটি সিমুলেটরটিতে ম্যানুয়ালি পরিষ্কার করতে হবে। এখানে কিভাবে
সের্গেই কালিনিচেনকো

দয়া করে সঠিক উত্তরটি চিহ্নিত করুন যাতে এই প্রশ্নটি আর
উত্তরহীন

4
@ রেজা: [[এনএসউসারডেফল্টস স্ট্যান্ডার্ড ইউজারডেফাল্টস] সেটঅজেক্ট: কেইয়ের জন্য নির্বাচিত তালিকা: ইউজারআইডি]। আমার অ্যাপ্লিকেশনটি এখানে আইওএস 8 এ ক্র্যাশ হয়ে গেছে যদিও আইওএস 6 এবং আইওএস 7 এ দুর্দান্ত কাজ করে। এখানে এনএসমিটেবল অ্যারে এবং ইউজারআইডি- তে নির্বাচিত তালিকাগুলি একটি স্ট্রিং।
মান্থান

@ মন্থান এটি অন্যরকম সমস্যা, তবে আমি অন্য কোথাও একই সমস্যার মুখোমুখি হয়েছি এবং ক্র্যাশ হওয়ার কারণটি ছিল যদিও আমি যে কীটিটির জন্য সংরক্ষণ করেছি সেটিকে NSMutableArrayএটি হিসাবে সংরক্ষণ করা হয়েছিল NSArrayএবং এটি আমার অ্যাপ্লিকেশনের ক্র্যাশ হয়ে গেছে। .. আমি একটি সংরক্ষণের প্রস্তাব দিচ্ছি এবং NSArrayআপনি যখন এটি ব্যবহার করতে চান তবে এটি ব্যবহারের জন্য NSMutableArrayingালাই করুন [NSMutableArray arrayWithArray:array];। আমি আশা করি এটি সাহায্য করবে.
রেজা শায়স্টেহপুর

উত্তর:


169

আমি মনে করি এটি iOS8 বিটা সিমুলেটারের বাগের কারণে হয়েছে।

প্রত্যাশিত আচরণটি হ'ল অ্যাপটি মোছা হয়ে গেলে সেই অ্যাপ্লিকেশনটির NSUserDephaults পাশাপাশি মুছে ফেলা হয়।

  • যাইহোক, NSUserDefaults হয় না মোছা যখন আপনি কাল্পনিক থেকে কোনো অ্যাপ মুছে ফেলুন।
  • আপনি যখন iOS8 চলমান কোনও দৈহিক ডিভাইস থেকে মুছবেন তখন এগুলি সঠিকভাবে মুছে ফেলা হবে।

আপাতত একটি দ্রুত এবং বিরক্তিকর সমাধান হ'ল আইওএস সিমুলেটর -> রিসেট সামগ্রী এবং সেটিংস।

সিমুলেটর 10 সহ এক্সকোড 9.2 এখনও এই সমস্যাটি উপস্থাপন করে। মেনু বিকল্পটি এখন হার্ডওয়্যার .. সমস্ত সামগ্রী এবং সেটিংস মুছুন

আমি বিটিডব্লগ একটি বাগ রিপোর্ট জমা দিয়েছি


45
এটি iOS 8 GM তে পরীক্ষা করেছে এবং বাগটি এখনও বিদ্যমান। খুবই বিরক্তিকর.
ম্যানফ্রেড শাইনার

4
আমি এক্সকোড 6 জিএম সিমুলেটর এবং আইওএস 8 (12A365) এ এই বগি আচরণটিও নিশ্চিত করতে পারি!
বরিস বার্ডারিć

4
কে কে এই মামলাটি অনুসরণ করতে চায় তার জন্য বিদ্যমান ওপেন রাডার লিঙ্ক: openradar.appspot.com/18540702
viggio24

4
দেখে মনে হচ্ছে এক্সকোড 6.1 (6A1052 ডি) -র আপডেটের পরে এসডিকে 8.1 এ বাগটি ঠিক করা হয়েছে
-কাদ

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

14

যেহেতু রিসেট সামগ্রী এবং সেটিংস একটি পারমাণবিক বিকল্প, তাই আপনি iOS 8 / এক্সকোড 6 জিএম সিমুলেটারের বাগটি সমাধান না করা পর্যন্ত আপনি দুটি অন্যান্য বিকল্প বিবেচনা করতে পারেন:

  1. যেখানে প্লাস্ট করা আছে সেখানে আপনি ম্যানুয়ালি প্লাস্ট ফাইলটি মুছতে পারবেন NSUserDefaults। এটি বর্তমানে এটিতে অবস্থিত ~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist এটি ইউইউডি ডিরেক্টরি নামের সাথে সঠিক কাজ করার উপযুক্ত সিমুলেটরটি খুঁজে পাওয়া একটু ক্লান্তিকর। সম্পাদনা : 2014-10-28 20-34-52 সঠিক পথ: ~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist

  2. আপনি প্লাস্টবডি উদাহরণস্বরূপ ব্যবহার করে (সম্ভবত একটি স্ক্রিপ্ট বিল্ড ফেজ ব্যবহার করে) প্লাস্টিতে "সার্জারি" করতে পারেন

/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist


আপনি / ডেটা / পরে / * কিছু_দেবা_আইডি * /
এ ডুড

5

একই সমস্যার মুখোমুখি যে কেউ।

আপনার যদি একই গোষ্ঠীর অধীনে 1 টিরও বেশি অ্যাপ থাকে এবং সেগুলি সমস্ত অ্যাপ্লিকেশন গ্রুপগুলি (সক্ষমতার অধীনে) ব্যবহার করে থাকে তবে ব্যবহারকারীর ডিফল্ট সাফ হওয়ার জন্য আপনাকে ডিভাইস থেকে সমস্ত অ্যাপ্লিকেশন সরিয়ে ফেলতে হবে।

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


4

কোডটি ডিভাইসে সূক্ষ্মভাবে কাজ করা উচিত। সিমুলেটারে কিছু বাগ থাকতে পারে।

সিমুলেটারের জন্য সামগ্রী এবং সেটিংস পুনরায় সেট করার চেষ্টা করুন।


4
বিষয়বস্তু এবং সেটিংস পুনরায় সেট করা ঠিকঠাক কাজ করে এবং চেক করার জন্য আমার কাছে এখন কোনও ডিভাইস নেই। tnx :)
রেজা শয়েস্টহপুর ২our

4

এটি একটি বাগ এবং আপনি নিম্নলিখিত কোড সহ এনএসউসারডেফল্টগুলি মুছতে পারেন

 NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
 [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

2

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

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// ADD THIS TO SIMULATE CLEAN/EMPTY DEFAULTS, COMMENT OUT AFTER INITIAL EXECUTION.
// This will cause the TRUE case to be executed.
[userDefaults removeObjectForKey:@"runCount"]

NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);

if ([userDefaults integerForKey:@"runCount"] != 1) {
    //not the 2nd run
    [userDefaults setInteger:1 forKey:@"runCount"];
    NSLog(@"not 2nd run");
} else {
    //second run or more
    NSLog(@"2nd run");
}

[userDefaults synchronize];

removeObjectForKeyঅ্যাপ্লিকেশনটির প্রথম চালনার সিমুলেট যুক্ত করা , এটিকে মন্তব্য করে পরবর্তী সমস্ত অ্যাপ্লিকেশন কার্যকর করা হবে।


2

আমার ক্ষেত্রে আমি নীচের ডিরেক্টরিতে * .লিস্টটি পেয়েছি:

[1] / ব্যবহারকারী / কিছু / ব্যবহারকারী নাম / গ্রন্থাগার / বিকাশকারী / কোরসিমুলেটর / ডিভাইস / কিছু-ডিভাইস-আইডি / ডেটা / লাইবারি / প্রিফারেন্সস / এসপি.উক্তর ডেফল্টস্টেস্ট.পল্লিস্ট

সমস্যা: এক্সকোড 6 (আইওএস 8 সিমুলেটর) এ অ্যাপ মুছে ফেলা হচ্ছে তবে ফাইলটি উপরে বর্ণিত মত ডিস্কে থেকে যায়।

সমাধান: অবস্থান ফাইলটি [1] থেকে ম্যানুয়ালি মুছে ফেলা হচ্ছে এবং এনএসউসারডেফল্টস চলে গেছে।

সুতরাং সিমুলেটরটি পুনরায় সেট করার বিরক্তিকর উপায় আর দরকার নেই।

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