प्लिस्ट को लिखना, लेकिन जब मैं सिमुलेशन छोड़ देता हूं तो यह खाली होता है

हाय मैंने इस ऑब्जेक्ट को प्लास्ट मैनेजर को अपनी परियोजना में प्लिस्ट लिखने/पढ़ने के लिए कार्यान्वित किया। समस्या यह है कि प्लिस्ट आबादी ठीक हो जाएगी (मुझे आशा है) और पृष्ठभूमि में प्रवेश करते समय (मैंने अधिसूचना और एनएसएलॉग [प्लास्टमैनर रीडलिस्ट: @ "डाटाबेस" ]) मैं अभी भी पहले दर्ज डेटा पढ़ सकता हूं।

बिंदु यह है कि जब मैं xcode पर सिमुलेशन रोकता हूं और फिर चलाता हूं तो प्लेस्ट खाली हो जाता है। क्यों?

@interface ReadWritePlist : NSObject
+(void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic;
+ (NSMutableDictionary *)readPlist:(NSString*)filePlist;

@end

@implementation ReadWritePlist


+ (void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    [dic writeToFile:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",filePlist]] atomically:YES];

}


+ (NSMutableDictionary *)readPlist:(NSString*)filePlist {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [[documentsDirectory stringByAppendingPathComponent:filePlist] stringByAppendingPathExtension:@"plist"];
    NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

    return dic;
}

हल

मैंने अभी पढ़ने/लिखने के लिए इन नए तरीकों को पाया है और यह काम कर रहा है। मुझे appdelegate (didFinishLaunchingWithOptions) के अंदर "प्रारंभिक फ़ाइलफाइल" विधि जोड़नी थी:

@implementation PlistManager

+ (NSMutableDictionary *)readPlist:(NSString*)filePlist {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [[documentsDirectory stringByAppendingPathComponent:filePlist] stringByAppendingPathExtension:@"plist"];
NSMutableDictionary *dic=[[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

return dic;
}




+ (void)writeToPlist:(NSString*)filePlist dic:(NSDictionary*)dic
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

    if ([dic writeToFile:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",filePlist]] atomically:YES]) {
    NSLog(@"Ok done!");
    } 
    else{
            NSLog(@"Noo not done!");
    }
} 

+ (void)initializeFileDic:(NSString*)FileNameExt
{
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *startPath = [[path stringByAppendingPathComponent:FileNameExt]stringByAppendingPathExtension:@"plist"] ;
    NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [[documentsDirectoryPath stringByAppendingPathComponent:FileNameExt]stringByAppendingPathExtension:@"plist"];

    NSLog(@"%@ \n,\n %@ ",startPath,filePath);
    if([NSDictionary dictionaryWithContentsOfFile: startPath]){
    NSLog(@"File %@ exists",filePath);
    }
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]){
        if([[NSDictionary dictionaryWithContentsOfFile:startPath] writeToFile:filePath atomically:NO])
        NSLog(@"File copied inside App DocumentsDirectory\n\n");
    else
        NSLog(@"Error while trying to copy into DocumentsDirectory\n\n"); 
    }

}


@end

क्या कोई समझा सकता है कि क्या गलत था? धन्यवाद

0
जोड़ा संपादित
विचारों: 1
सकारात्मक .. तुम मुझसे क्यों पूछो?
जोड़ा लेखक luca, स्रोत
क्या आपको NSDictionary 's writeToFile विधि सफलता परिणाम देता है? यह देखने के लिए जांचें कि यह हाँ या नहीं है। साथ ही, आप अपने शब्दकोश में किस प्रकार की चीजें ट्रैक कर रहे हैं? क्या इनमें से कोई भी आइटम कस्टम उद्देश्य सी ऑब्जेक्ट्स हैं?
जोड़ा लेखक Michael Dautermann, स्रोत
क्या आप एआरसी का उपयोग कर रहे हैं?
जोड़ा लेखक CarlJ, स्रोत

1 उत्तर

जब आप प्लेस्ट को डेटा को सहेजने के लिए कॉल करते हैं? यदि आप एक्सकोड से अपने ऐप को छोड़ देते हैं तो इसे तुरंत समाप्त कर दिया जाता है, और पृष्ठभूमि को समाप्त करने या दर्ज करने से संबंधित किसी भी एप्लिकेशन प्रतिनिधि विधियों से गुजरता नहीं है, जहां मुझे आपका कोड संदेह है।

सिम्युलेटर पर होम बटन दबाकर उन विधियों को चलाने का तरीका है।

0
जोड़ा