2013-04-25 11 views
5

मैं खुद को उद्देश्य सी के साथ परिचित करने की कोशिश कर रहा हूं, और मेरा वर्तमान लक्ष्य टेक्स्ट फ़ाइल में आइटम्स की एक सूची पढ़ना है और उन्हें एनएसएसटींग सरणी में स्टोर करना है।टेक्स्ट फ़ाइल से पढ़ना - उद्देश्य सी

वर्तमान में यह है कि मैं क्या है:

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"txt"]; 
NSData* data = [NSData dataWithContentsOfFile:filepath]; 
NSString* string = [[NSString alloc] initWithBytes:[data bytes] 
              length:[data length] 
              encoding:NSUTF8StringEncoding]; 

NSString* delimiter = @"\n"; 
listArray = [string componentsSeparatedByString:delimiter]; 

मैं अगर यह मायने रखती है यकीन नहीं है, लेकिन myList.txt मेरी सहायक फ़ाइलें में है।

फिलहाल, मेरे पास केवल मेरी सूची में एक आइटम है। हालांकि मैं 1 आइटम को अपने listArray में स्टोर करने में असमर्थ हूं।

मैं यह कुछ मूर्खतापूर्ण है कि मुझे याद आ रही है यकीन है, मैं उद्देश्य सी के लिए सिर्फ नया हूँ

संपादित करें: मैं इस पहले उल्लेख नहीं करने के लिए माफी माँगता हूँ। मुझे किसी प्रकार की त्रुटि नहीं मिल रही है। मेरी सरणी बस शून्य है।

+0

आपको कोई त्रुटि हो रही है? – gaige

+0

क्षमा करें मैं इसका उल्लेख करना भूल गया। मुझे कोई त्रुटि नहीं मिल रही है, मेरी सरणी बस शून्य है। बाद में मैं लोड की गई सूची वस्तुओं की सरणी की तुलना में कुछ करना चाहता हूं। – Johnrad

+0

क्या आपकी "myList.txt" फ़ाइल आपके बिल्ड चरण के कॉपी बंडल संसाधन अनुभाग में सूचीबद्ध है? (मुख्य प्रोजेक्ट व्यू पर अपने ऐप के लक्ष्य पर क्लिक करें।) –

उत्तर

24

मैं थोड़ा सा सरलीकरण सुझा रहा हूं जो आपकी समस्या का समाधान कर सकता है क्योंकि मैं यह नहीं कह सकता कि आपकी समस्या क्या है। जानकारी से मुझे यकीन नहीं है कि अगर आपको इसे पढ़ने के दौरान उचित फ़ाइल सामग्री मिल रही है या नहीं।

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"myList" ofType:@"txt"]; 
NSError *error; 
NSString *fileContents = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:&error]; 

if (error) 
    NSLog(@"Error reading file: %@", error.localizedDescription); 

// maybe for debugging... 
NSLog(@"contents: %@", fileContents); 

NSArray *listArray = [fileContents componentsSeparatedByString:@"\n"]; 
NSLog(@"items = %d", [listArray count]); 
+1

कोको को यह आवश्यक है कि आप 'NSError' का उपयोग करने से पहले प्रत्यक्ष वापसी मूल्य की जांच करें, न कि त्रुटि 'शून्य' है या नहीं। त्रुटि [गारंटीकृत] है (http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW1) से विधि वैध होने पर इंगित करती है, लेकिन विपरीत - यह सफलता के लिए 'शून्य 'होगी - _not_ गारंटीकृत है, भले ही आप इसे पहले से' शून्य 'पर सेट करें। –

+1

जोश, आपने जो लिखा है वह सटीक है, लेकिन आपको पता चलेगा कि अगर मुझे 'एनएसईआरआरआर' वापस मिला तो मैं सिर्फ संदेश को थूक दूंगा। मैं कॉल की सफलता या विफलता को निर्धारित करने की कोशिश नहीं कर रहा था और चेक के परिणामों के आधार पर अपना कोड प्रवाह संशोधित नहीं किया था। अगर मैं त्रुटि स्थिति जांचने का इरादा रखता हूं तो मैं 'if (fileContents == nil && error) 'का उपयोग करता। उस ने कहा, ऐसा लगता है कि किसी ऐसे व्यक्ति के लिए भेद को उजागर करना उचित है जो 'if' को प्रभावों को महसूस किए बिना सफलता जांच में परिवर्तित कर सकता है। – DBD

+0

filePath स्ट्रिंग WithContentsOfFile ^^ – user2070775

1

तो फ़ाइल की सामग्री सिर्फ है की तरह है:

[{"Title":"20","Cost":"20","Desc":""},{"Title":"10","Cost":"10.00","Desc":""},{"Title":"5","Cost":"5.00","Desc":""}] 

इस

-(id)readFromDocumentDBFolderPath:(NSString *)fileName 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    NSFileManager *fileManager=[NSFileManager defaultManager]; 
    if ([fileManager fileExistsAtPath:appFile]) 
    { 
     NSError *error= NULL; 
     NSData* data = [NSData dataWithContentsOfFile:appFile]; 
     id resultData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
     if (error == NULL) 
     { 
      return resultData; 
     } 
    } 
    return NULL; 
} 
संबंधित मुद्दे