2016-09-28 2 views
0

Ich benutze SetObject: forKey: um ein Objekt des Typs Rresource zu einem NSMutableDictionary namens: resourceLib hinzufügen.NSMutableDictionary Eintrag beschädigt nach dem Verlassen der Methode, wo Eintrag hinzugefügt wurde

Dann schaue ich sofort, was im Wörterbuch tatsächlich ist und es ist OK.

Wenn ich versuche, wieder in einem anderen Objekt Methode um es zu betrachten, ist der richtige Schlüssel vorhanden, aber ein Verweis auf eine String-Eigenschaft „url“ Fälle eine Liste der Fehlermeldungen einschließlich:

2016.09.28 11 : 32: 42,636 Testa [760: 16697] - [__ NSCFString url]:

@interface Rresource : NSObject 
@property (nonatomic,strong) NSString* url; 
@property (nonatomic,strong)NSMutableArray* resourceNotesArray; 
@property(nonatomic,strong)NSString* name; 
@property(nonatomic,strong)NSString* resourceUniqueID; 
@property(nonatomic)BOOL isResourceDirty; 

fügt diese Methode in einer Viewcontroller die Rresource zum NSMutableDictionary: unerkannt Selektor Beispiel 0x600000456350

Rresource Objekt wird definiert als gesandt

-(void)saveResource 
{ 
Rresource* resource = self.currentResource; 
Rresource* temp; 
if (resource) 
{ 
    if (resource.isResourceDirty) 
    { 
     [self.model.resourceLib setObject:resource forKey:resource.resourceUniqueID]; 
     temp = [self.model.resourceLib objectForKey:resource.resourceUniqueID]; 
    } 
} 

}

Ressourcen- und Temp enthalten identische Informationen die Informationen zeigt, wurde korrekt hinzugefügt.

In der Methode des Modells verursacht das folgende die oben beschriebene Fehlermeldung.

for (Rresource* resource in self.resourceLib) 
{ 
    NSString* string = resource.url; 
} 

wo Modell enthält:

@property(nonatomic,strong)NSMutableDictionary* resourceLib; 

und:

@implementation Model 


- (instancetype)init 
{ 
self = [super init]; 
if (self) 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); 
    self.path = [[paths objectAtIndex:0] stringByAppendingString:@"/Application Support/E2"]; 
    BOOL exists = [[NSFileManager defaultManager] createDirectoryAtPath:self.path withIntermediateDirectories:NO attributes:nil error:nil]; 
    if (!exists) 
    { 
     [[NSFileManager defaultManager] createDirectoryAtPath:self.path withIntermediateDirectories:NO attributes:nil error:nil]; 
    } 
    self.resourceLibPath = [NSString pathWithComponents:@[self.path,@"resources"]]; 
    self.resourceLib = [[NSMutableDictionary alloc]init]; 
    self.noteLibPath = [NSString pathWithComponents:@[self.path, @"notes"]]; 
    self.noteLib = [[NSMutableDictionary alloc]init]; 
} 
return self; 

ich diese Frage gefunden haben eindeutig noch schwer zu fragen, nachdem sie die Formulierung mehrere Stunden zu verbringen. Ich entschuldige mich.

Ich habe so ziemlich alles für etwa eine Woche probiert. Ich bin ratlos.

Irgendwelche Ideen?

Dank

Antwort

0

Nach this entry on Enumeration, wenn Sie über ein Wörterbuch durchlaufen die schnelle Auszählung Syntax, sind Sie über die Tasten laufen. Im obigen Codebeispiel gehen Sie davon aus, dass die Aufzählung über ihre Werte erfolgt. Was Sie effektiv tun, ist ein NSString Objekt als Rresource zu werfen, und senden Sie einen Selektor nur ein aktuelles Rresource Objekt kann darauf reagieren.

Dies sollte die Schleife beheben:

for (NSString* key in self.resourceLib) 
{ 
    NSString* string = [self.resourceLib objectForKey:key].url; 
} 
+0

Das war es! Danke vielmals! –

Verwandte Themen