আইফোন কোর ডেটা সমাধানের সময় সমাধানের সময় ত্রুটি সমাধান করা হয়নি


169

সংরক্ষণের চেষ্টা করার সময় আমি মূল তথ্যটি থেকে একটি অদ্ভুত ত্রুটি বার্তা পাচ্ছি তবে ত্রুটিটি পুনরায় উত্পাদনযোগ্য নয় এমন সমস্যা (এটি বিভিন্ন সময়ে করার সময় বিভিন্ন সময়ে উপস্থিত হয়)

ত্রুটি বার্তা:

Unresolved error Domain=NSCocoaErrorDomain Code=1560 UserInfo=0x14f5480 "Operation could not be completed. (Cocoa error 1560.)", {
NSDetailedErrors = (
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x5406d70 "Operation could not be completed. (Cocoa error 1570.)",
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x14f9be0 "Operation could not be completed. (Cocoa error 1570.)"
);
}

এবং ত্রুটি উত্পন্ন করার পদ্ধতিটি হ'ল:

- (IBAction)saveAction:(id)sender {
    NSError *error;
    if (![[self managedObjectContext] save:&error]) {
        // Handle error
        NSLog(@"Unresolved error %@, %@, %@", error, [error userInfo],[error localizedDescription]);
        exit(-1);  // Fail
    }
}

এই বার্তার কারণ জন্য কোন ধারণা? যে এটি এলোমেলো সময়ে প্রদর্শিত হবে


এটি আপনাকে সাহায্য করতে পারে: "আইফোন কোর ডেটা" উত্পাদনের "ত্রুটি হ্যান্ডলিং" স্ট্যাকওভারফ্লো
জোহানেস ফারেনক্রুগ

উত্তর:


296

এর অর্থ একটি বাধ্যতামূলক সম্পত্তি শূন্য করা হয়েছে। হয় আপনার * .xcodatamodel এ "alচ্ছিক" বাক্সটি পরীক্ষা করুন বা আপনি যখন পরিচালিতঅবজেক্ট কনটেক্সটটিতে সংরক্ষণ করছেন তখন নিশ্চিত হয়ে নিন যে আপনার বৈশিষ্ট্যগুলি ভরে গেছে।

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

সম্পাদনা:

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


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

আমি মূল কারণটিতে যেতে পারিনি তবে আমি সমস্ত সম্পত্তি optionচ্ছিক করে সমস্যাটি সরিয়ে দিতে পরিচালিত করেছি।
মাইকেল ওসোফস্কি

আপনি কি চার্লসের কোড চেষ্টা করেছেন, এটি আপনাকে বলবে যে কোন ক্ষেত্রটি সমস্যা।
ডেভিড ওং

233

আমি নিজেও কিছুক্ষণ এই লড়াই করেছিলাম। এখানে আসল সমস্যাটি হ'ল আপনি যে ডিবাগটি পেয়েছেন তা সমস্যাটি কী তা আপনাকে দেখায় না। এর কারণ হ'ল কোরেডাটা এনএসইরর অবজেক্টগুলিকে "শীর্ষ স্তরের" এনএসইরর অবজেক্টে একটি অ্যারে রাখবে যদি একাধিক সমস্যা থাকে তবে এটি প্রত্যাবর্তন করে (এটি কারণ আপনি 1560 ত্রুটি দেখেন যা একাধিক সমস্যা নির্দেশ করে এবং ত্রুটির একটি অ্যারে 1570s)। এটি প্রদর্শিত হয় যে কোরেডাটার কাছে মুঠোফুলি কী রয়েছে যা এটি ত্রুটি হিসাবে ফেরত ত্রুটি হিসাবে তথ্য ব্যবহার করার জন্য ব্যবহার করে যা আপনাকে আরও দরকারী তথ্য দেবে (যেমন ত্রুটিটি ঘটেছে সেই সত্তার মতো, যে সম্পর্কটি / বৈশিষ্ট্যটি হারিয়েছিল ইত্যাদি) etc )। আপনি ব্যবহারকারীআইনফো অভিধানটি পরিদর্শন করতে যে কীগুলি ব্যবহার করেন তা এখানে রেফারেন্স ডক্সে পাওয়া যাবে

এটি সংরক্ষণের সময় ফিরে আসা ত্রুটি থেকে যুক্তিসঙ্গত আউটপুট পেতে আমি ব্যবহার করি কোডটি এটি:

    NSError* error;
    if(![[survey managedObjectContext] save:&error]) {
        NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
        NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
        if(detailedErrors != nil && [detailedErrors count] > 0) {
            for(NSError* detailedError in detailedErrors) {
                NSLog(@"  DetailedError: %@", [detailedError userInfo]);
            }
        }
        else {
            NSLog(@"  %@", [error userInfo]);
        }
    }

এটি আউটপুট উত্পাদন করবে যা আপনাকে অনুপস্থিত ক্ষেত্রগুলি বলে দেয়, যা সমস্যার সমাধান করা উল্লেখযোগ্যভাবে সহজ করে তোলে।


এই কোডের জন্য অনেক ধন্যবাদ। এটি কোরডাটা সমস্যাটি ট্র্যাকিংকে প্রকৃতপক্ষে অনেক সহজ করে তুলেছে।
মিজিএল

21

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

আমি যে পদ্ধতিটি ব্যবহার করছি তার একটি সংস্করণ এখানে। ('_ SharedManagedObjectContext' '' [[[[ইউআইএএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] ডেলিগেট] ম্যানেজডঅবজেক্ট কনটেক্সট] 'এর জন্য একটি # নির্দিষ্ট সংজ্ঞা)))

- (BOOL)saveData {
    NSError *error;
    if (![_sharedManagedObjectContext save:&error]) {
        // If Cocoa generated the error...
        if ([[error domain] isEqualToString:@"NSCocoaErrorDomain"]) {
            // ...check whether there's an NSDetailedErrors array            
            NSDictionary *userInfo = [error userInfo];
            if ([userInfo valueForKey:@"NSDetailedErrors"] != nil) {
                // ...and loop through the array, if so.
                NSArray *errors = [userInfo valueForKey:@"NSDetailedErrors"];
                for (NSError *anError in errors) {

                    NSDictionary *subUserInfo = [anError userInfo];
                    subUserInfo = [anError userInfo];
                    // Granted, this indents the NSValidation keys rather a lot
                    // ...but it's a small loss to keep the code more readable.
                    NSLog(@"Core Data Save Error\n\n \
                      NSValidationErrorKey\n%@\n\n \
                      NSValidationErrorPredicate\n%@\n\n \
                      NSValidationErrorObject\n%@\n\n \
                      NSLocalizedDescription\n%@", 
                      [subUserInfo valueForKey:@"NSValidationErrorKey"], 
                      [subUserInfo valueForKey:@"NSValidationErrorPredicate"], 
                      [subUserInfo valueForKey:@"NSValidationErrorObject"], 
                      [subUserInfo valueForKey:@"NSLocalizedDescription"]);
                }
            }
            // If there was no NSDetailedErrors array, print values directly
            // from the top-level userInfo object. (Hint: all of these keys
            // will have null values when you've got multiple errors sitting
            // behind the NSDetailedErrors key.
            else {
                    NSLog(@"Core Data Save Error\n\n \
                      NSValidationErrorKey\n%@\n\n \
                      NSValidationErrorPredicate\n%@\n\n \
                      NSValidationErrorObject\n%@\n\n \
                      NSLocalizedDescription\n%@", 
                      [userInfo valueForKey:@"NSValidationErrorKey"], 
                      [userInfo valueForKey:@"NSValidationErrorPredicate"], 
                      [userInfo valueForKey:@"NSValidationErrorObject"], 
                      [userInfo valueForKey:@"NSLocalizedDescription"]);

            }
        } 
        // Handle mine--or 3rd party-generated--errors
        else {
            NSLog(@"Custom Error: %@", [error localizedDescription]);
        }
        return NO;
    }
    return YES;
}

এটি আমাকে 'এনএসভালিডেশনআররকি'-এর মান দেখতে দেয়, যা আমি যখন ওপি থেকে সমস্যাটির মুখোমুখি হয়েছিলাম, সরাসরি অ-optionচ্ছিক মূল ডেটা সত্তাগুলির দিকে ইঙ্গিত করলাম যা সংরক্ষণ করার চেষ্টা করার আগে সেট করতে ভুলে গিয়েছিলাম।


এছাড়াও খুব দরকারী। বিশেষত যখন আপনি এই কাঁচা get n \ n core n কোর ডেটার সত্তা বর্ণনা স্ট্রিংগুলি পান।
লুকাসজ

ঝরঝরে। 'বার্তা' অব্যবহৃত বিটিডব্লিউ।
পোজো

0

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

সুতরাং, প্রকল্পটি হ'ল:

"Parent" with relationship "child" One to One
Create Child 1, set parent. Save - OK
Create Child 2, set parent. Save - Error, Child 1.Parent == nil
(behind the scene child 2 did nullify child 1 parent)

পিতামাতার মধ্যে সম্পর্ক এক থেকে একের মধ্যে একের সাথে পরিবর্তনের বিষয়টি এই সমস্যার সমাধান করে।


0

আমার টাইপ ইন্টের ক্ষণস্থায়ী সম্পত্তি ছিল যা alচ্ছিক ছিল না। স্পষ্টতই, এটি 0 এ সেট করা থাকলে 1570 ত্রুটি উপস্থিত হয়। সবেমাত্র আমার সমস্ত ক্ষণস্থায়ী বৈশিষ্ট্যগুলি optionচ্ছিকতে পরিবর্তন করা হয়েছে। নীল-চেক যুক্তি প্রয়োজনে কোড প্রয়োগ করা যেতে পারে।


0

এর অর্থ হ'ল আপনার মডেলটি বৈধতা দিতে ব্যর্থ হয়েছে, যা বিভিন্ন কারণে ঘটতে পারে: আপনার মডেলের অব্যবহৃত সম্পত্তি, মূল্য অনুপস্থিত যা প্রয়োজনীয় হিসাবে চিহ্নিত হয়েছে। ঠিক কী ভুল হয়েছে সে সম্পর্কে আরও ভালভাবে বুঝতে, এমন একটি জায়গায় ব্রেক ব্রেকপয়েন্ট স্থাপন করুন যেখানে আপনি নিজের অবজেক্টটি সংরক্ষণ করতে প্রস্তুত, এবং validateFor...পদ্ধতিটির একটিতে যেমন কল করুন :

po [myObject validateForInsert]

সমস্যা সম্পর্কিত আরও বিশদ তথ্য ত্রুটি বর্ণনায় রয়েছে। সফল বৈধতা মানে আপনি কোনও আউটপুট পাবেন না।


0

এটা আমাকে সাহায্য করেছে। এটিও পরীক্ষা করে দেখুন।

পরীক্ষা করে দেখুন ঐচ্ছিক আপনার * .xcodatamodel বস্তু বক্স

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