में असफल रहा है मैंने कमांड लाइन प्रोग्राम में इसका उपयोग करते समय एनएसबंडल के साथ कुछ अजीब व्यवहार देखा है। यदि, मेरे प्रोग्राम में, मैं एक मौजूदा बंडल लेता हूं और इसकी एक प्रति बनाते हैं और फिर संसाधन फ़ोल्डर में कुछ देखने के लिए पथफॉर रिसोर्स का उपयोग करने का प्रयास करते हैं, तो शून्य हमेशा तब तक लौटाया जाता है जब तक कि बंडल मैं देख रहा हूं कि मेरे सामने मौजूद नहीं है कार्यक्रम शुरू हुआ। मुझे लगता है कि इस मुद्दे को दोहराता है और प्रासंगिक कोड है एक नमूना एप्लिकेशन बनाया: इस परीक्षण एप्लिकेशन के प्रयोजन के लिएएनएसबंडल पथफॉर रिसोर्स शेल टूल
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *exePath = [NSString stringWithCString:argv[0]
encoding:NSASCIIStringEncoding];
NSString *path = [exePath stringByDeletingLastPathComponent];
NSString *templatePath = [path stringByAppendingPathComponent:@"TestApp.app"];
// This call works because TestApp.app exists before this program is run
NSString *resourcePath = [NSBundle pathForResource:@"InfoPlist"
ofType:@"strings"
inDirectory:templatePath];
NSLog(@"NOCOPY: %@", resourcePath);
NSString *copyPath = [path stringByAppendingPathComponent:@"TestAppCopy.app"];
[[NSFileManager defaultManager] removeItemAtPath:copyPath
error:nil];
if ([[NSFileManager defaultManager] copyItemAtPath:templatePath
toPath:copyPath
error:nil])
{
// This call will fail if TestAppCopy.app does not exist before
// this program is run
NSString *resourcePath2 = [NSBundle pathForResource:@"InfoPlist"
ofType:@"strings"
inDirectory:copyPath];
NSLog(@"COPY: %@", resourcePath2);
[[NSFileManager defaultManager] removeItemAtPath:copyPath
error:nil];
}
[pool release];
}
, मान लेते हैं कि TestApp.app पहले से ही अपने परीक्षण ऐप जैसा निर्देशिका में मौजूद है करते हैं। कॉपी: यदि मैं यह, 2 NSLog कॉल होगा उत्पादन चलाने (शून्य)
अब, अगर मैं अगर बयान में अंतिम removeItemAtPath कॉल बाहर टिप्पणी इतनी है कि जब मेरा कार्यक्रम बाहर निकालता है TestAppCopy.app अभी भी मौजूद है और फिर पुन: चलाएं, कार्यक्रम अपेक्षित काम करेगा।
मैंने इसे सामान्य कोको एप्लिकेशन में आजमाया है और मैं व्यवहार को पुन: पेश नहीं कर सकता। यह केवल एक खोल उपकरण लक्ष्य में होता है। क्या कोई इस कारण से सोच सकता है कि यह क्यों विफल रहा है?
Btw: मैं 10.6.4 पर इस कोशिश कर रहा हूँ और मैं मैक ओएस एक्स
अद्यतन: यदि मैं अपने परीक्षण बंडलों को एक दूसरे निर्देशिका में ले जाता हूं, तो मेरा खोल उपकरण रहता है, यह सब ठीक काम करता है। इसलिए, मुझे केवल समस्या दिखाई देती है यदि बंडल मेरे ऐप के समान निर्देशिका में हैं। मैं इस आवश्यकता के साथ काम कर सकता हूं लेकिन यह जानना अच्छा होगा कि यह मूल रूप से वर्णित क्यों नहीं करता है। – Dustin
जैसा कि कहा गया है, मैंने इस समय के लिए इस बारे में काम किया है, लेकिन मुझे यह समझने में वास्तव में दिलचस्पी है कि यह क्यों हो रहा है और मैं इसे रोकने के लिए क्या कर सकता हूं। – Dustin