2012-02-23 4 views
6

में ऐप निर्देशिका से छवि हटाएं मैं अपने आईफोन ऐप से एक छवि को हटाना चाहता हूं। मैं छवि के नाम को तर्क के रूप में पास करते हुए नीचे दी गई विधि का उपयोग करता हूं।आईफोन

समस्या यह है कि छवि हटाई नहीं गई है।

- (void)removeImage:(NSString*)fileName { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
         [NSString stringWithFormat:@"%@.png", fileName]]; 

    [fileManager removeItemAtPath: fullPath error:NULL]; 
    NSLog(@"image removed: %@", fullPath); 

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];  
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]); 
} 

अंतिम दो पंक्तियां मेरी ऐप निर्देशिका में सामग्री दिखाती हैं और जिस छवि को मैं हटाना चाहता हूं वह अभी भी वहां है। मैं क्या गलत कर रहा हूं?

उत्तर

5

आप दस्तावेज़ निर्देशिका में एक फ़ाइल को हटाने का प्रयास कर रहे हैं। फिर आप बंडल संसाधन निर्देशिका की सामग्री पढ़ते हैं। ये एक ही निर्देशिका नहीं हैं।

यदि आप दस्तावेज़ निर्देशिका में फ़ाइल को हटाने का प्रयास कर रहे हैं, तो आपको अंत में अपने NSLog() में उस निर्देशिका को रेड करना चाहिए। यदि आप अपने बंडल के अंदर एक फाइल को हटाने की कोशिश कर रहे हैं, तो यह असंभव है। ऐप बंडल पर हस्ताक्षर किए गए हैं और संशोधित नहीं किए जा सकते हैं।

+0

मैं एक छवि को हटाने की कोशिश कर रहा हूं जिसे मैंने एक्सकोड में जोड़ा है, इसलिए यह शायद मेरे बंडल में है। यह डिफ़ॉल्ट छवि है। मैं इसे हटाने और एक नया जोड़ने की कोशिश कर रहा हूं। – bruno

+1

आप ऐपबंडल में मौजूद छवियों को हटा नहीं सकते हैं (ये वे छवि हैं जिन्हें आपने एक्सकोड में जोड़ा है)। – rckoenes

+0

क्या मैं इसे हटाने के बजाय डिफ़ॉल्ट छवि को प्रतिस्थापित नहीं कर सकता? – bruno

4

अपने कोड ठीक लग रहा है, तो आप कोड के लिए कुछ 'NSError' ऑब्जेक्ट जोड़ने का प्रयास करें: ऊपर मैं एक NSError removeItemAtPath की त्रुटि पैरामीटर पारित कर दिया

- (void)removeImage:(NSString*)fileName { 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent: 
         [NSString stringWithFormat:@"%@.png", fileName]]; 

    NSError *error = nil; 
    if(![fileManager removeItemAtPath: fullPath error:&error]) { 
     NSLog(@"Delete failed:%@", error); 
    } else { 
     NSLog(@"image removed: %@", fullPath); 
    } 

    NSString *appFolderPath = [[NSBundle mainBundle] resourcePath];  
    NSLog(@"Directory Contents:\n%@", [fileManager directoryContentsAtPath: appFolderPath]); 
} 

कोड में। अगर सिस्टम फ़ाइल को हटा नहीं सकता है, तो यह विधि NO लौटाएगी और error ऑब्जेक्ट को उठाए गए त्रुटि के साथ भर देगा।

+0

"ऑपरेशन पूरा नहीं हो सका। ऐसी कोई फ़ाइल या निर्देशिका नहीं" मैं फ़ाइलों या फ़ोल्डर्स की खोज कैसे करूं? क्योंकि ऐसा लगता है कि एक और फ़ोल्डर है जहां छवियों को सहेजा जा रहा है। – bruno

+0

वैसे आपने छवि को पहली जगह कहां से सहेजा था। – rckoenes

2

आपकी टिप्पणी के आधार पर मुझे पता चला कि आप default.png को हटाने और इसे किसी अन्य के साथ प्रतिस्थापित करने का प्रयास कर रहे हैं। दुर्भाग्य से, यह असंभव है। छवि default.png आपके एप्लिकेशन बंडल का एक हिस्सा है, जिसे इसे बनाया और हस्ताक्षरित करने के बाद संशोधित नहीं किया जा सकता है (यह ऐप्पल से सुरक्षा उपाय है, इसलिए समीक्षा के बाद एप्लिकेशन बदल नहीं सकते हैं)। एकमात्र स्थान जहां आप फ़ाइलों को बना और हटा सकते हैं, आपके एप्लिकेशन (दस्तावेज़ फ़ोल्डर) को दिए गए सैंडबॉक्स के अंदर है।

+0

यह सेब दिशानिर्देशों पर है? क्योंकि मुझे उससे संबंधित कुछ भी नहीं मिला। – bruno

+0

यह "आईओएस ऐप प्रोग्रामिंग गाइड" में था (यहां उद्धृत अनुभाग: http://stackoverflow.com/questions/8122267/app-bundle-protection-signed-bundle-may-be-modified) लेकिन वे प्रतीत होते हैं इसे संशोधित करने के लिए। मैंने चारों ओर देखा और पाया: https://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/AppSigning.html जो इंगित करता है कि केवल निष्पादन योग्य भाग वास्तव में हस्ताक्षरित हैं। हालांकि, वे वास्तव में रनटाइम पर संशोधन करने का एक तरीका प्रदान नहीं करते हैं। –

+0

यहां अनुभाग है कि वे आपके लिए कितना इरादा रखते हैं: https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/App-RelatedResources/App-RelatedResources.html# // apple_ref/doc/यूआईडी/TP40007072-CH6-SW12 –