2009-05-21 9 views
5

मुझे यकीन है कि मुझे एक साधारण आईफोन प्रोग्राम में कुछ स्पष्ट याद आ रहा है, जिसे मैं लिखने की कोशिश कर रहा हूं, लेकिन कोड इतना बुनियादी लगता है कि मैं नहीं देख सकता कि क्या गलत है।सेट करने में असमर्थ ऑब्जेक्ट: forKey: NSMutableDictionary में

मैं कक्षाओं और उनके संबंधित सहेजे गए फ़ाइल नामों की एक सूची संग्रहीत करने के लिए एक एनएसएमयूटेबल डिक्शनरी का उपयोग करने की कोशिश कर रहा हूं। हेडर फाइल में मैं शब्दकोश

@interface ClassList : UITableViewController { 
NSString *homedirectory; 
NSString *masterindexpath; 
NSMutableDictionary *classFilenameGlossary; 
NSMutableArray *listofclasses; 
} 

@property (retain, nonatomic) NSString *homedirectory; 
@property (retain, nonatomic) NSString *masterindexpath; 
@property (retain, nonatomic) NSMutableDictionary *classFilenameGlossary; 
@property (retain, nonatomic) NSMutableArray *listofclasses; 

घोषित और, बेशक, कार्यान्वयन फ़ाइल में:

:

@implementation ClassList 

@synthesize homedirectory; 
@synthesize masterindexpath; 
@synthesize classFilenameGlossary; 
@synthesize listofclasses; 

मुझे लगता है कि classlist बचाता किसी मौजूदा फ़ाइल से viewDidLoad पर इस शब्दकोश को प्रारंभ forKey:

- (void)viewDidLoad { 
[super viewDidLoad]; 

// Get home directory 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
homedirectory = [paths objectAtIndex:0]; 
masterindexpath = [homedirectory stringByAppendingPathComponent:@"MasterIndex"]; 

// Get master course list or create it if necessary 

NSFileManager *fm = [NSFileManager defaultManager]; 
if ([fm fileExistsAtPath:masterindexpath] == NO) 
{ 
    NSMutableDictionary *temporarydictionary = [NSMutableDictionary dictionary]; 
    [temporarydictionary writeToFile:masterindexpath atomically:NO]; 
    [temporarydictionary release]; 
} 

[classFilenameGlossary initWithContentsOfFile:masterindexpath]; 

[homedirectory retain]; 
[masterindexpath retain]; 

}

बाद में, मैंने एक आइटम setObject का उपयोग कर जोड़ने लेकिन टी वह शब्दकोश कभी नहीं बदलता है। मूल रूप से मैं एक सूचक इस ClassList फाइल करने के लिए वापस का उपयोग कर किसी अन्य दृश्य नियंत्रक में इस कर रहा था, लेकिन एक बार मुझे पता चला कि काम नहीं किया, मैं सरलीकृत और बस किसी भी नमूना वस्तु और चाबी ClassList फ़ाइल के भीतर स्थापित करने का प्रयास:

[classFilenameGlossary setObject:@"sample filename" forKey:@"sample classname"]; 

मैंने डीबगर वैरिएबल सूची को देखा है और यह क्लासफिल्नेमग्लोसरी को 0 कुंजी/वैल्यू जोड़े के साथ एनएसएमयूटेबल डिक्शनरी के रूप में सही ढंग से पहचाना जाता है। मुझे किसी प्रकार की त्रुटि नहीं मिल रही है; शब्दकोश बस कभी नहीं बदलता है। फिलहाल, फ़ाइल masterindexpath से लोड किया गया शब्दकोश खाली है (क्योंकि मैं अभी तक कोई आइटम नहीं जोड़ पाया है), लेकिन मुझे मुझे शब्दकोश में आइटम जोड़ने में सक्षम होने से नहीं रोकना चाहिए।

मैं आईफोन प्रोग्रामिंग में कुल शुरुआत करने वाला हूं, इसलिए मुझे यकीन है कि कुछ बुनियादी बात है जो मुझे याद आ रही है। मैं किसी भी मदद की सराहना करता हूं।

उत्तर

8

यह पंक्ति:

[classFilenameGlossary initWithContentsOfFile:masterindexpath]; 

इस तरह दिखना चाहिए:

classFilenameGlossary = [[NSMutableDictionary alloc] initWithContentsOfFile:masterindexpath]; 

आप NSMutableDictionary के लिए स्मृति को आबंटित करने में भूल गया था, तो यही कारण है कि यह कभी नहीं initializes है।

+0

धन्यवाद, यह काम करता है! मैं उस समस्या पर 2 दिनों के लिए अटक गया हूँ। मैंने सोचा कि हेडर फ़ाइल के @interface खंड में NSMutableDictionary * classFilenameGlossary को घोषित करना अनावश्यक अनावश्यक है, लेकिन स्पष्ट रूप से नहीं। –

+0

@ डैन: नहीं। यह सिर्फ एक एनएसएमयूटेबल डिक्शनरी के लिए पॉइंटर के लिए कमरा आवंटित करता है, न कि शब्दकोश के लिए कमरा। –

+0

मुझे पता है कि यह पोस्ट करने में देर हो चुकी है, लेकिन भविष्य के Googlers के लिए, आप बस [NSMutableDictionary DictionaryWithContentsOfFile:] का उपयोग भी कर सकते हैं और यह स्वचालित रूप से आवंटित और प्रारंभ होता है। – vilhalmer

संबंधित मुद्दे