কোর ডেটাতে সমস্ত এন্ট্রি মুছুন / রিসেট করবেন?


235

কোর ডেটাতে সঞ্চিত সমস্ত এন্ট্রি মুছে ফেলার কোনও উপায় আপনি কি জানেন? আমার স্কিমা একই থাকা উচিত; আমি কেবল এটি ফাঁকাতে পুনরায় সেট করতে চাই।


সম্পাদন করা

আমি এই প্রোগ্রামটিমেটিকভাবে করতে চাইছি যাতে কোনও ব্যবহারকারী প্রয়োজনীয়ভাবে একটি resetবোতামটি হিট করতে পারে ।


6
নীচে অনেক উত্তর তারিখ। ব্যবহার NSBatchDeleteRequeststackoverflow.com/a/31961330/3681880
Suragch

উত্তর:


198

আপনি এখনও এনএসফিলম্যানেজার: সরানো আইটেম্যাটপথ :: পদ্ধতি ব্যবহার করে প্রোগ্রামটিমেটিকভাবে ফাইলটি মুছতে পারেন।

NSPersistentStore *store = ...;
NSError *error;
NSURL *storeURL = store.URL;
NSPersistentStoreCoordinator *storeCoordinator = ...;
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

তারপরে, এটি সঠিকভাবে পুনরায় তৈরি করা হয়েছে তা নিশ্চিত করার জন্য কেবল অবিরাম স্টোরটি যুক্ত করুন।

প্রতিটি সত্তার মাধ্যমে পুনরাবৃত্তি করার প্রোগ্রামগত উপায়টি ধীর এবং ত্রুটির প্রবণ। এটি করার জন্য ব্যবহার হ'ল যদি আপনি কিছু সত্ত্বাকে মুছতে চান এবং অন্যকে নয়। তবে আপনাকে এখনও নিশ্চিত করতে হবে যে আপনি রেফারেন্সিয়াল অখণ্ডতা বজায় রেখেছেন বা আপনি আপনার পরিবর্তনগুলি অবিরাম রাখতে পারবেন না।

কেবল স্টোরটি সরিয়ে ফেলা এবং এটিকে পুনরুদ্ধার করা দ্রুত এবং নিরাপদ উভয়ই, এবং অবশ্যই রানটাইমে অগ্রগতি সম্পন্ন করা যেতে পারে।

IOS5 + এর জন্য আপডেট Update

আইওএস 5 এবং ওএস এক্স 10.7 এ বাহ্যিক বাইনারি স্টোরেজ (এক্সটার্নালবাইনারি ডেটাস্টোরেজ বা স্টোর এক্সটার্নাল রেকর্ড ফাইলে স্টোর) প্রবর্তনের সাথে, স্টোর URL গুলির দ্বারা নির্দেশিত ফাইলগুলি মুছে ফেলা যথেষ্ট নয়। আপনি বাহ্যিক রেকর্ড ফাইলগুলি পিছনে রেখে যাবেন। যেহেতু এই বাহ্যিক রেকর্ড ফাইলগুলির নামকরণ প্রকল্পটি সর্বজনীন নয়, আমার কাছে এখনও সর্বজনীন সমাধান নেই। - an0 মে 8 '12 এ 23:00 এ


1
এটি সম্ভবত নির্ভরযোগ্যতার জন্য সেরা সমাধান। যদি আমি কিছু না থেকে সমস্ত ডেটা মুছতে চাইতাম তবে আমি এটি ব্যবহার করব: stackoverflow.com/questions/1077810/…
মাইকেল গ্রিনিচ

12
আমি জানি কীভাবে স্টোরকর্ডিনেটরটিকে সঠিকভাবে পুনরুদ্ধার করতে হয়। তবে আমি কীভাবে স্থির স্টোর পেতে পারি তা জানি না। সুতরাং আপনি দয়া করে ন্যায়বিচারের পরিবর্তে সঠিক উদাহরণ দিতে পারেন: এনএসপিএসসিস্ট্যান্টস্টোর * স্টোর = ...;
পাসকেল ক্লিন

11
[[এনএসফাইলম্যানেজার ডিফল্ট ম্যানেজার] সরান আইটেম্যাটেল: স্টোর ইউআরএল ত্রুটি: এবং ত্রুটি] আরও ভাল।
an0

3
@ পাসল যদি আপনি স্টোরের সমন্বয়কারী পেতে পারেন তবে ধ্রুবক স্টোরসের সম্পত্তি দ্বারা এটির সমস্ত স্থায়ী স্টোরটিতে আপনার অ্যাক্সেস থাকতে হবে।
মিহাই দামিয়ান

2
এখানে কীভাবে একটি নতুন খালি স্টোর পুনরায় তৈরি করা যায় তার উদাহরণ সহ কোড: স্ট্যাকওভারফ্লো.com/
জোশুয়া সি। লারনার

140

আপনি এসকিউএলাইট ফাইলটি মুছতে পারেন - তবে আমি কোনও ফাংশন দিয়ে পৃথকভাবে টেবিলগুলি পরিষ্কার করে তা করতে বেছে নিই:

- (void) deleteAllObjects: (NSString *) entityDescription  {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:_managedObjectContext];
    [fetchRequest setEntity:entity];

    NSError *error;
    NSArray *items = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
    [fetchRequest release];


    for (NSManagedObject *managedObject in items) {
        [_managedObjectContext deleteObject:managedObject];
        DLog(@"%@ object deleted",entityDescription);
    }
    if (![_managedObjectContext save:&error]) {
        DLog(@"Error deleting %@ - error:%@",entityDescription,error);
    }

}

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

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


দুর্দান্ত সমাধান। ধন্যবাদ। ডিএলগ () কী?
মাইকেল গ্রিনিচ

আহ হ্যাঁ - দুঃখিত এটি একটি বিশেষ ফাংশন যা আমি ব্যবহার করি কেবল তখনই একটি এনএসলোগ হয় যখন বিল্ডটি কোনও ডিইবিইউজি বিল্ড হয় - কেবল এনএসএলগের সাথে প্রতিস্থাপন করুন।
গ্রুপাল

6
আপনি এখানে ডিএলগের একটি বাস্তবায়ন দেখতে পাচ্ছেন: cimgf.com/2009/01/24/DPping-nslog-in-release-builds
ম্যাট লং

3
এটি আমার পক্ষে সুন্দরভাবে কাজ করে। তবে এটি আরও দ্রুত যেতে, একটি আদেশের সাহায্যে কোনও নির্দিষ্ট সত্তার সমস্ত অবজেক্ট মুছে ফেলার উপায় আছে কি? এসকিউএল এর মতো আপনি যেমন কিছু করতে পারেন, টেবিল সত্তা_নাম। আমি পুরো এসকিউএল ফাইলটি মুছতে চাই না কারণ আমি কেবল একটি নির্দিষ্ট সত্তার সমস্ত অবজেক্ট মুছতে চাই, অন্য সত্তা নয়।
ma11 she28

8
এনএসডেটরিয় * allEntities = _managedObjectModel.entitiesByName ব্যবহার করুন; আপনার মডেলটিতে সমস্ত সত্ত্বা পেতে এবং তারপরে আপনি স্টোরের সমস্ত সত্তা শুদ্ধ করতে এই এনএসডিকেরিয়ের কীগুলি দিয়ে পুনরাবৃত্তি করতে পারেন।
adam0101

60

আইওএস 10+ এর জন্য আপডেট আপডেট

NSBatchDeleteRequestস্মৃতিতে লোড না করে বা সেগুলির মাধ্যমে পুনরাবৃত্তি না করে সত্তার সমস্ত বস্তু মুছতে ব্যবহার করুন।

// create the delete request for the specified entity
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = MyEntity.fetchRequest()
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

// get reference to the persistent container
let persistentContainer = (UIApplication.shared.delegate as! AppDelegate).persistentContainer

// perform the delete
do {
    try persistentContainer.viewContext.execute(deleteRequest)
} catch let error as NSError {
    print(error)
}

এই কোডটি আইওএস 10 এবং সুইফট 3 এর জন্য আপডেট করা হয়েছে যদি আপনার আইওএস 9 সমর্থন করতে হয় তবে এই প্রশ্নটি দেখুন

সূত্র:


3
আমি পুরো ব্লকটি একটি moc.performBlockAndWait({ () -> Void in... এর ভিতরে রাখব })
সুইফট আরকিটেক্ট

2
নিশ্চিত হয়ে নিন যে আপনি অ্যাপ্লিকেশন পুনরায় চালু না হওয়া অবধি কেন প্রবেশগুলি মুছে ফেলা হয় না বা আমি আমার এনএসব্যাচডিলিটরউয়েস্ট দু'বার সম্পাদন করি? সত্ত্বাগুলি স্মৃতিতে লোড করা থাকলে উপরের কোডটি দীর্ঘ গল্পটি যথেষ্ট নয়
হানি

38

আমি clearStoresএমন একটি পদ্ধতি লিখেছি যা প্রতিটি স্টোরের মধ্য দিয়ে যায় এবং এটি সমন্বয়কারী এবং ফাইলসিস্টেম উভয় থেকে মুছে ফেলা হয় (বামদিকে বাম হাত পরিচালনা করার ক্ষেত্রে ত্রুটি):

NSArray *stores = [persistentStoreCoordinator persistentStores];

for(NSPersistentStore *store in stores) {
    [persistentStoreCoordinator removePersistentStore:store error:nil];
    [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil];
}

[persistentStoreCoordinator release], persistentStoreCoordinator = nil;

এই পদ্ধতিটি এমন কোনও coreDataHelperশ্রেণীর ভিতরে রয়েছে যা যত্ন সহকারে (অন্যান্য জিনিসের মধ্যে) যখন স্থির থাকে তখন ধ্রুবক স্টোর তৈরি করে।


"নির্বাচক '
ধ্রুবক স্টোর

27

আমি একটি হোমভিউকন্ট্রোলার ক্লাসে একটি বোতামের ইভেন্টের মূল ডেটা থেকে সমস্ত ডেটা সরিয়েছি: এই নিবন্ধটি আমাকে এতটা সহায়তা করেছে যে আমি অনুভব করেছি যে আমি অবদান রাখছি।

-(IBAction)buttonReset:(id)sender
{
    NSLog(@"buttonReset Pressed");

    //Erase the persistent store from coordinator and also file manager.
    NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject];
    NSError *error = nil;
    NSURL *storeURL = store.URL;
    [self.persistentStoreCoordinator removePersistentStore:store error:&error];
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];


    NSLog(@"Data Reset");

    //Make new persistent store for future saves   (Taken From Above Answer)
    if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        // do something with the error
    }

}

নোট করুন যে সেলফ-পার্সেন্টস্টোরকর্ডিনেটরকে কল করার জন্য আমি হোম ভিউ কন্ট্রোলারে একটি সম্পত্তি ঘোষণা করেছি। (আমি সংরক্ষণ ও লোডিংয়ের জন্য যে ব্যবস্থাপনিত অবজেক্ট কনটেক্সট ব্যবহার করি তা নিয়ে চিন্তা করবেন না))

@property (nonatomic, retain) NSManagedObjectContext        *   managedObjectContext;
@property (nonatomic, retain) NSPersistentStoreCoordinator  *   persistentStoreCoordinator;

তারপরে আমার কাছে একটি হোমভিউ কনট্রোলার তৈরি করার ঠিক নীচে অ্যাপডেলিগেট অ্যাপ্লিকেশনডডিফিনিশলঞ্চিংয়ে:

homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
homeViewController.managedObjectContext = self.managedObjectContext;
homeViewController.persistentStoreCoordinator = self.persistentStoreCoordinator;

@ আয়তেট, আপনার পক্ষে কি এই কাজ করেছে ?. আমার জন্য এটি কাজ করছে না, দয়া করে এই স্ট্যাকওভারফ্লো.com
রঞ্জিত

1
"অ্যাপডেলিগেট * অ্যাড = [[ইউআইএএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] প্রতিনিধি]] ব্যবহার ব্যতীত এই উত্তরটি রয়েছে;" এবং বিজ্ঞাপনের সাথে স্ব প্রতিস্থাপন করুন। এবং কোডের শেষ দুটি বিট অনুলিপি করবেন না
সিসি

1
আপনি কেন পরিচালিতঅবজেক্ট কনটেক্সটে রিসেট কল করছেন না? ম্যানেজডঅবজেক্ট সম্পর্কে আপনার যদি কিছু দৃ strong় রেফারেন্স থাকে তবে কী হবে?
পরাগ বাফনা

@ পরগবাফনা আপনি সঠিক, উপরের কোড নমুনা ধরে নিয়েছে যে পরিচালিত অবজেক্টগুলির কোনও শক্তিশালী উল্লেখ নেই। আপনার যদি কিছু থাকে তবে আপনার পরিচালিতঅবজেক্টকন্টেক্সটে 'রিসেট' কল করতে হবে এবং আপনার যে কোনও পরিচালিত অবজেক্টকে ডি-রেফারেন্স করতে হবে।
উঠুন

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

19

MagicalRecord এটিকে খুব সহজ করে তোলে।

[MyCoreDataObject MR_truncateAll];

16
এটি দুর্দান্ত তবে বিষয়বস্তু ছাড়াই যেহেতু আমি একটি কোরডাটা সমাধান নির্দিষ্ট করেছি
মাইকেল গ্রিনিচ

8
সক্রিয় রেকর্ড আনা হচ্ছে হয় মূল ডেটা সমাধান।
কাসাদেমোড়া

7
তবে এর মতো উত্তর প্রশ্নের ক্ষেত্র ছাড়িয়ে যায়। এটি করার জন্য তিনি কোনও অ্যাড'ল ফ্রেমওয়ার্ক ব্যবহার করতে চান বলে ধরে নেওয়ার কোনও কারণ নেই।
jpswain

আমি যুক্তি দেব যে এটি প্রশ্নের উত্তর দেয় না। সমস্ত সত্তা নয়, একটি সত্তা থেকে এন্ট্রি সরিয়ে ফেলার এটি একটি ভাল উপায় ...! আপনি কীভাবে মডেলটির সমস্ত সত্তার মাধ্যমে গণনা করবেন এবং MR_truncateAllতাদেরকে প্রেরণ করবেন?
ফতুহোকু

এমআর_আরঙ্কটেটএল এর উত্স দেখুন - এটি সমস্ত বস্তু নিয়ে আসে তবে তাদের বৈশিষ্ট্যগুলি নয় (যেমন আমরা এনএসএমও বাতিল করার ইচ্ছা করি), তারপরে এটি নির্দিষ্ট সত্তার জন্য বস্তুর উপরে পুনরাবৃত্তি করে এবং সেগুলি মুছে দেয়। github.com/maologicalpanda/MagicalRecord/blob/master/ MagicalRecord/…
1in9ui5t

19

আইওএস 9 +, সুইফট 2

সমস্ত সত্তা সমস্ত বস্তু মুছুন

func clearCoreDataStore() {
    let entities = managedObjectModel.entities
    for entity in entities {
        let fetchRequest = NSFetchRequest(entityName: entity.name!)
        let deleteReqest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
        do {
            try context.executeRequest(deleteReqest)
        } catch {
            print(error)
        }
    }
}

1
নিশ্চিত হয়ে নিন যে আপনি অ্যাপ্লিকেশন পুনরায় চালু না হওয়া অবধি কেন প্রবেশগুলি মুছে ফেলা হয় না বা আমি আমার এনএসব্যাচডিলিটরউয়েস্ট দু'বার সম্পাদন করি? সত্ত্বাগুলি স্মৃতিতে লোড করা থাকলে উপরের কোডটি দীর্ঘ গল্পটি যথেষ্ট নয়
হানি

13

[নতুন প্রতিক্রিয়া জিজ্ঞাসা করা একটি অনুগ্রহের প্রতিক্রিয়ায় দেরিতে উত্তর]

পূর্ববর্তী উত্তরগুলি সন্ধান করছি,

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

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

আপনার অবিরাম স্টোর সেট আপ করার সময় আপনি এই জাতীয় কিছু করবেন:

NSURL *storeDirectoryURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"persistent-store"];
if ([[NSFileManager defaultManager] createDirectoryAtURL:storeDirectoryURL
        withIntermediateDirectories:NO
        attributes:nil
        error:nil]) {
    NSURL *storeURL = [storeDirectoryURL URLByAppendingPathComponent:@"MyApp.sqlite"];
    // continue with storeURL as usual...
}

তারপরে আপনি যখন দোকানটি সরাতে চেয়েছিলেন,

[[NSFileManager defaultManager] removeItemAtURL:storeDirectoryURL error:nil];

এটি পুনরাবৃত্তভাবে কাস্টম সাব-ডিরেক্টরি এবং এতে থাকা সমস্ত কোর ডেটা ফাইল উভয়ই সরিয়ে দেয়।

এটি কেবলমাত্র তখনই কার্যকর হয় যদি আপনার কাছে অন্য, গুরুত্বপূর্ণ ডেটার মতো একই ফোল্ডারে আপনার অবিরাম স্টোর না থাকে । দস্তাবেজ ডিরেক্টরিতে পছন্দ করুন, এতে সম্ভবত অন্যান্য দরকারী জিনিস রয়েছে। যদি এটি আপনার অবস্থা, প্রথমে আপনাকে ফাইল খুঁজছেন যে আপনার একই এফেক্ট পেতে পারে না রাখতে চান এবং অন্য সব কিছুর সরিয়ে ফেলা হয়। কিছুটা এইরকম:

NSString *docsDirectoryPath = [[self applicationDocumentsDirectory] path];
NSArray *docsDirectoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:docsDirectoryPath error:nil];
for (NSString *docsDirectoryItem in docsDirectoryContents) {
    // Look at docsDirectoryItem. If it's something you want to keep, do nothing.
    // If it's something you don't recognize, remove it.
}

এই পদ্ধতির ত্রুটি প্রবণ হতে পারে । আপনার কখনই নিশ্চিত করুন যে আপনি কি জানেন হতে পেয়েছেন যে , আপনি রাখতে চান ফাইল কারণ অন্যথায় আপনি গুরুত্বপূর্ণ ডাটা অপসারণ করতে পারেন। অন্যদিকে, আপনি সঞ্চয় করার জন্য ব্যবহৃত ফাইল / ডিরেক্টরি নামটি না জেনে বাহ্যিক বাইনারি ফাইলগুলি সরাতে পারেন।


যদি আপনি ওয়াল ফাইলটি সম্পর্কে ভীত হন তবে কেবল এটি অক্ষম করুন
onmyway133

11

কোর ডেটা শুদ্ধ করার জন্য এখানে সম্মিলিত সমাধান দেওয়া হল।

- (void)deleteAllObjectsInCoreData
{
    NSArray *allEntities = self.managedObjectModel.entities;
    for (NSEntityDescription *entityDescription in allEntities)
    {
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        [fetchRequest setEntity:entityDescription];

        fetchRequest.includesPropertyValues = NO;
        fetchRequest.includesSubentities = NO;

        NSError *error;
        NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

        if (error) {
                NSLog(@"Error requesting items from Core Data: %@", [error localizedDescription]);
            }

        for (NSManagedObject *managedObject in items) {
            [self.managedObjectContext deleteObject:managedObject];
        }

        if (![self.managedObjectContext save:&error]) {
            NSLog(@"Error deleting %@ - error:%@", entityDescription, [error localizedDescription]);
        }
    }  
}

10

আপনি যদি সমস্ত অবজেক্ট মুছতে চান এবং ব্যাকিং ফাইলগুলি মুছতে না চান তবে আপনি নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করতে পারেন:

- (void)deleteAllObjectsInContext:(NSManagedObjectContext *)context
                       usingModel:(NSManagedObjectModel *)model
{
    NSArray *entities = model.entities;
    for (NSEntityDescription *entityDescription in entities) {
        [self deleteAllObjectsWithEntityName:entityDescription.name
                                   inContext:context];
    }
}

- (void)deleteAllObjectsWithEntityName:(NSString *)entityName
                             inContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *fetchRequest =
        [NSFetchRequest fetchRequestWithEntityName:entityName];
    fetchRequest.includesPropertyValues = NO;
    fetchRequest.includesSubentities = NO;

    NSError *error;
    NSArray *items = [context executeFetchRequest:fetchRequest error:&error];

    for (NSManagedObject *managedObject in items) {
        [context deleteObject:managedObject];
        NSLog(@"Deleted %@", entityName);
    }
}

সাবধান থাকুন যে এটি খুব ধীর হতে পারে (আপনার অবজেক্টের গ্রাফে কতগুলি অবজেক্ট রয়েছে তার উপর নির্ভর করে)।


অ্যাপ্লিকেশন আপডেট করার সময় কীভাবে পুরানো ডেটা (তিনটি টেবিল বলুন, একটি টেবিল থেকে আমি ডেটা সাফ করতে চাই)
মদন মোহন

6

আপনি যদি সমস্ত অবজেক্টের রুট মুছতে চান (যা কোর ডেটা স্ট্যাক ছিঁড়ে ফেলার চেয়ে অনেক সহজ, তবে কম পারফরম্যান্ট), এটি আরও কার্যকর বাস্তবায়ন:

- (void)deleteAllManagedObjectsInModel:(NSManagedObjectModel *)managedObjectModel context:(NSManagedObjectContext *)managedObjectContext
{
    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
        [managedObjectContext performBlockAndWait:^{
            for (NSEntityDescription *entity in managedObjectModel) {
                NSFetchRequest *fetchRequest = [NSFetchRequest new];
                [fetchRequest setEntity:entity];
                [fetchRequest setIncludesSubentities:NO];
                NSArray *objects = [managedObjectContext executeFetchRequest:fetchRequest error:nil];
                for (NSManagedObject *managedObject in objects) {
                    [managedObjectContext deleteObject:managedObject];
                }            
            }

            [managedObjectContext save:nil];
        }];
    }];
    [operation setCompletionBlock:^{
        // Do stuff once the truncation is complete
    }];
    [operation start];
}

এই প্রয়োগটি NSOperationমূল থ্রেডটি মুছে ফেলার কাজটি পরিচালনা করে এবং সমাপ্তির বিষয়ে অবহিত করে। স্ট্যাটাসটি মূল থ্রেডে ফিরিয়ে আনতে আপনি সম্পূর্ণতা ব্লকের মধ্যে কোনও বিজ্ঞপ্তি বা কিছু প্রেরণ করতে চাইতে পারেন।


মনে রাখবেন যে আপনার NSManagedObjectContext মত সক্রিয়া করা আবশ্যক NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];অন্যথায় অর্ডার এই পদ্ধতি ব্যবহার করার জন্য আপনি ত্রুটি পাবেন:Can only use -performBlock: on an NSManagedObjectContext that was created with a queue.
উইল

6

আইওএস 10 + সুইফট 3 সমাধান:

func clearCoreDataStore() {
    let delegate = UIApplication.shared.delegate as! AppDelegate
    let context = delegate.persistentContainer.viewContext

    for i in 0...delegate.persistentContainer.managedObjectModel.entities.count-1 {
        let entity = delegate.persistentContainer.managedObjectModel.entities[i]

        do {
            let query = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!)
            let deleterequest = NSBatchDeleteRequest(fetchRequest: query)
            try context.execute(deleterequest)
            try context.save()

        } catch let error as NSError {
            print("Error: \(error.localizedDescription)")
            abort()
        }
    }
}

সমস্ত মূল ডেটা সত্তার মাধ্যমে আইট্রেট করে এবং সেগুলি সাফ করে


4

পোস্টের জন্য ধন্যবাদ. আমি এটি অনুসরণ করেছিলাম এবং এটি আমার পক্ষে কাজ করে। তবে আমার আরও একটি সমস্যা ছিল যা উত্তরের কোনওটিতে উল্লেখ করা হয়নি। সুতরাং আমি নিশ্চিত না যে এটি কেবল আমার ছিল কিনা।

যাইহোক, ভেবেছিলাম আমি এখানে সমস্যা এবং আমার সমাধানের উপায় পোস্ট করব।

ডাটাবেসে আমার কয়েকটি রেকর্ড ছিল, আমি ডিবিতে নতুন ডেটা লেখার আগে সমস্ত কিছু পরিষ্কার করে ফেলতে চেয়েছিলাম, তাই আমি সমস্ত কিছু দিয়েছিলাম

[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]; 

এবং তারপরে managedObjectContextডেটাবেস অ্যাক্সেস করতে ব্যবহৃত হত (এখনই খালি মনে হবে), কোনওভাবে এখনও ডেটা ছিল। সমস্যাসমাধানের এর কিছুক্ষণ পর, আমি দেখেছি যে, আমি পুনরায় সেট করার প্রয়োজন managedObjectContext, managedObject, managedObjectModelএবং persistentStoreCoordinatorআগে আমি ব্যবহার করেন, managedObjectContextdabase অ্যাক্সেস করতে। এখন লিখতে আমার কাছে একটি পরিষ্কার ডাটাবেস আছে।


সুতরাং পরিচালিতঅবজেক্টকন্টেক্সট, ম্যানেজডঅজেক্ট, ম্যানেজডঅজেক্টমোডেল এবং পার্সেন্টিস্টস্টোরকর্ডিনেটরটিকে পুনরায় সেট করা ফাইলটি মুছে ফেলার পরে ডাটাবেসযুক্ত ফাইলটি পিছনে রাখে?
ড্যানিয়েল ব্রওয়ার

4

এখানে অ্যাপডেলিগেট স্বতে কম কল এবং শীর্ষ রেট করা উত্তরের বাইরে থাকা কোডের শেষ বিট সহ কিছুটা সরল সংস্করণ রয়েছে is এছাড়াও আমি একটি ত্রুটি পেয়ে যাচ্ছিলাম "অবজেক্টের ধ্রুবক স্টোরটি এই এনএস ম্যানেজডঅবজেক্ট কনটেক্সট এর সমন্বয়কারী থেকে পৌঁছানো যায় না" তাই কেবল এটি পিছনে যুক্ত করার প্রয়োজন।

NSPersistentStoreCoordinator *storeCoordinator = [self persistentStoreCoordinator];
NSPersistentStore *store = [[storeCoordinator persistentStores] lastObject];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"dataModel"];
NSError *error;

[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];

if (storeCoordinator != nil) {
    _managedObjectContext = [[NSManagedObjectContext alloc] init];
    [_managedObjectContext setPersistentStoreCoordinator:storeCoordinator];
}

4

দ্রুত সমাধান:

class func deleteAllManagedObjects() {

        let modelURL = NSBundle.mainBundle().URLForResource("some string", withExtension: "mom")
        let mom = NSManagedObjectModel(contentsOfURL: modelURL)

        for entityName in mom.entitiesByName.keys {
            let fr = NSFetchRequest(entityName: entityName as String)
            let a = Utility.managedObjectContext().executeFetchRequest(fr, error: nil) as [NSManagedObject]
            for mo in a {
                Utility.managedObjectContext().deleteObject(mo)
            }
        }

        Utility.managedObjectContext().save(nil)
    }

দ্রুত 2let modelURL = NSBundle.mainBundle().URLForResource("some string", withExtension: "momd")!
সোরিকিডো

3

অন্য কোথাও অনুসন্ধানে সংরক্ষণের দ্রুত রেফারেন্স হিসাবে - মুছে ফেলার পরে অবিরাম স্টোরটি পুনরায় তৈরি করা এর মাধ্যমে করা যেতে পারে:

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
// do something with the error
}

আমি আপনার কোডটি চেষ্টা করেছি, তবে এক্সকোড এই লাইনে একটি ব্যতিক্রম ছুঁড়েছে, সুতরাং আপনার এই বিষয়ে কী বলতে হবে।
রঞ্জিত

3

এই প্রশ্নের বেশ কয়েকটি ভাল উত্তর। এখানে একটি সুন্দর সংক্ষিপ্ত একটি। প্রথম দুটি লাইন স্ক্লাইট ডাটাবেস মুছবে। তারপরে: লুপটি পরিচালিতঅবজেক্ট কনটেক্সট মেমরির কোনও অবজেক্ট মুছে দেয়।

NSURL *storeURL = [[(FXYAppDelegate*)[[UIApplication sharedApplication] delegate] applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppName.sqlite"];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
for (NSManagedObject *ct in [self.managedObjectContext registeredObjects]) {
    [self.managedObjectContext deleteObject:ct];
}

1
এই উদ্দেশ্যে প্রতিনিধিদলটিকে অপব্যবহার করবেন না: hollance.com/2012/02/dont-abuse-the-app-delegate
মাইকেল

1
আমি @ মিশেলডোরনার সাথে একমত অ্যাপডেলিগেটে অনেক কিছু যুক্ত করা কার্য সম্পাদনকে প্রভাবিত করতে পারে এবং আপনার বাইনারিটির আকারের একটি নির্ভরশীল স্পাইডার ওয়েভের সাথে নির্ভরশীলতার সাথে প্রসারণ করতে পারে যেখানে হঠাৎ করে প্রতিটি ক্লাসে অ্যাপডেলিগেট অন্তর্ভুক্ত করা দরকার। যদি আপনি এই ক্রপিংয়ের বিষয়টি খুঁজে পান তবে এই উদ্দেশ্যে নির্দিষ্ট একটি পৃথক নিয়ামক তৈরি করুন। অ্যাপ্লিকেশনটিতে বেসিক ইনিশিয়ালাইজেশন এবং পরিচালনার স্থিতির পরিবর্তনগুলির জন্য অ্যাপ্লিকেশন থাকা উচিত, এর চেয়ে বেশি কিছু নয়।
jcpennypincher

2

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

 - (void)clearCoreData
{
NSError *error;
NSEntityDescription *des = [NSEntityDescription entityForName:@"Any_Entity_Name" inManagedObjectContext:_managedObjectContext];
NSManagedObjectModel *model = [des managedObjectModel];
NSArray *entityNames = [[model entities] valueForKey:@"name"];

for (NSString *entityName in entityNames){

    NSFetchRequest *deleteAll = [NSFetchRequest fetchRequestWithEntityName:entityName];
    NSArray *matches = [self.database.managedObjectContext executeFetchRequest:deleteAll error:&error];

}
    if (matches.count > 0){
        for (id obj in matches){

            [_managedObjectContext deleteObject:obj];
        }
       [self.database.managedObjectContext save:&error];
    }
}

"যে কোনও_সংশ্লিষ্টতা_নাম" এর জন্য কেবল আপনার সত্তার যে কোনও একটির নাম দিন, কেবলমাত্র আপনার সত্তার মধ্যে থাকা সত্তার বিবরণটি আমাদের খুঁজে বের করতে হবে। ভ্যালুফোর্কি @ "নাম" সমস্ত সত্তার নাম ফিরিয়ে দেবে। শেষ পর্যন্ত, সংরক্ষণ করতে ভুলবেন না।


2

এনএসফাইলম্যানেজারের ইউআরএল অপসারণের সাথে স্বীকৃত উত্তরটি সঠিক, তবে আইওএস 5+ এডিট অনুযায়ী বলা হয়েছে, অবিরাম স্টোরটি কেবল একটি ফাইল দ্বারা প্রতিনিধিত্ব করা হয় না। এসকিউএলাইট স্টোরের জন্য এটি * .সক্লাইট, * .স্ক্লাইট-এসএমএম এবং * .স্ক্লাইট-ওয়াল ... ভাগ্যক্রমে আইওএস 7+ এর পরে আমরা পদ্ধতি ব্যবহার করতে পারি

[এনএসপিএসসিস্ট্যান্টস্টোরইডিনেটর + অপসারণব্যব্যাকিউটস কনটেন্টএন্ডপার্সসিস্ট্যান্ট স্টোরআউটআরএল: বিকল্পসমূহ: ত্রুটি:]

অপসারণের যত্ন নিতে, যাতে কোডটি এমন কিছু হওয়া উচিত:

NSPersistentStore *store = ...;
NSError *error;
NSURL *storeURL = store.URL;
NSString *storeName = ...;
NSPersistentStoreCoordinator *storeCoordinator = ...;
[storeCoordinator removePersistentStore:store error:&error];
[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:storeURL.path options:@{NSPersistentStoreUbiquitousContentNameKey: storeName} error:&error];

2
আপনাকে বিকল্পের ডিক পাস করতে হবে, বিশেষত স্টোরের নাম, যেমন: @ @
tomi44g

2

সুইফট 4/5, আইওএস 9+

পুরো CoreDataএসকিউএলাইট ফাইলটি পুনর্নির্মাণ নিশ্চিত করবে যে সমস্ত ডেটা মুছে গেছে, তাই সমস্ত সত্তা মুছে ফেলা হয়েছে। শুধু কল deleteAndRebuild()

class CoreDataStack {
    // Change this
    static let datamodelName = "ProjectName"
    static let storeType = "sqlite"

    static let persistentContainer = NSPersistentContainer(name: datamodelName)
    private static let url: URL = {
        let url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0].appendingPathComponent("\(datamodelName).\(storeType)")

        assert(FileManager.default.fileExists(atPath: url.path))

        return url
    }()

    static func loadStores() {
        persistentContainer.loadPersistentStores(completionHandler: { (nsPersistentStoreDescription, error) in
            if let error = error {
                fatalError(error.localizedDescription)
            }
        })
    }

    static func deleteAndRebuild() {
        try! persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: url, ofType: storeType, options: nil)

        loadStores()
    }
}

যে কারও জন্য এটি ব্যবহার করছেন, মনে রাখবেন যে সেখানে যখন কোনও এসকিএল ফাইল নেই তখন এটি কেবল "প্রথমবার" ক্র্যাশ হবে (আমি আমার উত্তরে কেবল "প্রহরী" ব্যবহার করেছি)
ফ্যাটি

1

সমস্ত সংস্করণ সঙ্গে কাজ করে। সমস্ত এন্ট্রি মোছার জন্য এবং প্রসঙ্গটি সংরক্ষণ করতে সত্তার নাম পাস করুন এবং পুনরাবৃত্তি করুন।

func deleteData(entityToFetch: String, completion: @escaping(_ returned: Bool) ->()) {
    var context = NSManagedObjectContext()
    if #available(iOS 10.0, *) {
        context = self.persistentContainer.viewContext
    } else {
        context = self.managedObjectContext
    }

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>()
    fetchRequest.entity = NSEntityDescription.entity(forEntityName: entityToFetch, in: context)
    fetchRequest.includesPropertyValues = false
    do {
        let results = try context.fetch(fetchRequest) as! [NSManagedObject]
        for result in results {
            context.delete(result)
        }
        try context.save()
        completion(true)
    } catch {
        completion(false)
        print("fetch error -\(error.localizedDescription)")
    }
}

1

এখানে এমন একটি সংস্করণ রয়েছে যা আপনার কাছে থাকা প্রতিটি টেবিলের প্রতিটি রেকর্ড মুছে দেয়।

সুইফট 4

static func resetDatabase() {
    do {
        try dataStore.persistentStoreCoordinator.managedObjectModel.entities.forEach { (entity) in
            if let name = entity.name {
                let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: name)
                let request = NSBatchDeleteRequest(fetchRequest: fetch)
                try mainContext.execute(request)
            }
        }

        try mainContext.save()
    } catch {
        print("error resenting the database: \(error.localizedDescription)")
    }
}

1

অন্য একটি পদ্ধতি (মুছুন ব্যাচের অনুরোধ বাদে) আমি প্রায়শই ব্যবহার করি (অ্যাপের প্রয়োজনের ভিত্তিতে) অবিরাম স্টোরটি পুনরায় সেট করা। বাস্তবায়নটি আইওএস 10+ এবং সুইফটের জন্য দেখায় (ধরে নেওয়া যায় যে আপনার কাছে একটি কোরিডাটা ম্যানেজার শ্রেণি রয়েছে):

let persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "<Data-Model-Name>“)
    container.loadPersistentStores(completionHandler: { (storeDescription, err) in
        if let err = err {
            fatalError("loading of store failed: \(err)")
        }
    })
    return container
}()

func resetPersistentStore() {

    if let persistentStore = persistentContainer.persistentStoreCoordinator.persistentStores.last {
        let storeURL = persistentContainer.persistentStoreCoordinator.url(for: persistentStore)

        do {
            try persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: storeURL, ofType: NSSQLiteStoreType, options: nil)
        } catch {
            print("failed to destroy persistent store:", error.localizedDescription)
        }

        do {
            try persistentContainer.persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: nil)
        } catch {
            print("failed to re-add persistent store:", error.localizedDescription)
        }
    }

}

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


1

সুইফট 5.1 সমাধান

public static func reset() {
    let coordinator = _persistentContainer.persistentStoreCoordinator
    for store in coordinator.persistentStores where store.url != nil {
        try? coordinator.remove(store)
        try? FileManager.default.removeItem(atPath: store.url!.path)
    }
}

0

ক্রমাগত স্টোর ফাইল মুছুন এবং একটি নতুন ধ্রুবক স্টোর সমন্বয়কারী সেটআপ করবেন?


6
একটি পরিষ্কার করা অবিচ্ছিন্ন স্টোর ফাইলগুলি মুছে ফেলবে না, ধন্যবাদ। এটি সত্য হলে বিপর্যয়ের একটি রেসিপি হবে।
হান্টার

0

আপনার ফাইল ইউআরএলপথ থেকে স্ক্লাইটটি মুছুন এবং তারপরে বিল্ড করুন।


আমি যখন অ্যাপ্লিকেশন ইনস্টল করা হয়েছিল তখন বুঝিয়েছি।
মাইকেল গ্রিনিচ

0

ধরে নিচ্ছি আপনি ব্যবহার করছেন MagicalRecordএবং একটি ডিফল্ট জেদী দোকান রয়েছে:

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

এটি "লগআউট" শৈলীর পরিস্থিতিগুলির জন্য গডো যখন আপনি সমস্ত কিছু মুছতে চান তবে নতুন ডেটা পেতে একটি ওয়ার্কিং স্টোর এবং এমওসি রাখতে চান (একবার ব্যবহারকারী লগ ইন করে ...)

extension NSManagedObject {

    class func dropAllData() {

        MagicalRecord.saveWithBlock({ context in

            for name in NSManagedObjectModel.MR_defaultManagedObjectModel().entitiesByName.keys {
                do { try self.deleteAll(name, context: context) }
                catch { print("⚠️ ✏️ Error when deleting \(name): \(error)") }
            }

            }) { done, err in
                MagicalRecord.cleanUp()
                MagicalRecord.setupCoreDataStackWithStoreNamed("myStoreName")
        }
    }

    private class func deleteAll(name: String, context ctx: NSManagedObjectContext) throws {
        let all = NSFetchRequest(entityName: name)
        all.includesPropertyValues = false

        let allObjs = try ctx.executeFetchRequest(all)
        for obj in allObjs {
            obj.MR_deleteEntityInContext(ctx)
        }

    }
}

0

এটা ব্যবহার কর

+(NSArray *)fetchDataFromEntity:(NSString *)entityName context:(NSManagedObjectContext *)context
{
    NSFetchRequest * fetchRequest =[[NSFetchRequest alloc] init];
    NSEntityDescription * CategoriesEntity = [NSEntityDescription entityForName:entityName inManagedObjectContext:context];
    [fetchRequest setEntity:CategoriesEntity];

    NSError * error;
    NSInteger count = [context countForFetchRequest:fetchRequest error:&error];

    if (count && count>0) {

        NSArray * fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
        if (fetchedObjects && fetchedObjects.count>0) {

            return fetchedObjects;
        }else
            return nil;

    }
    else
        return nil;
}
+ (void)deleteObjectsOfArray:(NSMutableArray*)ary context:(NSManagedObjectContext *)context {
    for (NSManagedObject * obj in ary) {
        [context deleteObject:obj];
    }
    NSError *saveError = nil;
    [context save:&saveError];
}
+ (void)deleteEntity:(NSString *)entityName context:(NSManagedObjectContext *)context {
    NSArray *listArray = [self fetchDataFromEntity:entityName context:context];
    [self deleteObjectsOfArray:[NSMutableArray arrayWithArray:listArray] context:context];
}

0

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

- (void)resetObjects
{
    [self deleteAllObjectsInEntity:@"Entity1"];
    [self deleteAllObjectsInEntity:@"Entity2"];
    [self deleteAllObjectsInEntity:@"Entity3"];
    [self deleteAllObjectsInEntity:@"Entity4"];
}

-(void) deleteAllObjectsInEntity:(NSString*) entityName
{
    MainDataContext *coreDataContext = [MainDataContext sharedInstance];
    NSManagedObjectContext *currentContext = coreDataContext.managedObjectContext;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:currentContext];
    [fetchRequest setEntity:entity];

    NSError *error;
    NSArray *items = [currentContext executeFetchRequest:fetchRequest error:&error];

    [items enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSManagedObject * obj, NSUInteger idx, BOOL *stop) {
        [currentContext deleteObject:obj];
    }];


    if (![currentContext save:&error]) {
        NSLog(@"Error deleting %@ - error:%@",entityName,error);
    }
}

0

সমস্ত রেকর্ড মুছে ফেলার জন্য এখানে আমার swift3 সংস্করণ। 'ব্যবহারকারী' সত্তার নাম

@IBAction func btnDelAll_touchupinside(_ sender: Any) {

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedObjectContext = appDelegate.persistentContainer.viewContext

    let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
    let req = NSBatchDeleteRequest(fetchRequest: fetchReq)

    do {
        try managedObjectContext.execute(req)

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