2016-09-28 60 views
0

我使用setObject:forKey:將類型爲Rresource的對象添加到名爲resourceLib的NSMutableDictionary中。NSMutableDictionary條目在離開添加條目的方法後已損壞

然後,我馬上看看字典中的內容,這沒關係。

當我嘗試它再跑到其他對象的方法,正確的關鍵是存在的,但一個字符串屬性的引用「URL」情況下的錯誤消息列表包括:

2016年9月28日11 :32:42.636種皮[760:16697] - [__ NSCFString URL]:無法識別的選擇發送到實例0x600000456350

Rresource對象被定義爲:在一個的ViewController

@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; 

這種方法增加了Rresource到的NSMutableDictionary

-(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]; 
    } 
} 

}

資源和臨時包含表示已正確添加的信息相同的信息。

在model的方法中,以下將導致上述錯誤消息。

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

其中模型包含:

@property(nonatomic,strong)NSMutableDictionary* resourceLib; 

和:

@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; 

我發現這個問題很難甚至花費數小時制定之後要問清楚。我道歉。

我已經嘗試了幾乎所有的一切約一個星期。我很難過。

任何想法?

感謝

回答

0

this entry on Enumeration,當你使用快速列舉語法遍歷一本字典,你遍歷它的鍵。在上面的代碼示例中,假設枚舉發生在其值上。你實際上做的是將一個NSString對象作爲Rresource,併發送給它一個選擇器,只有實際的對象可以響應Rresource對象。

這應該可以解決循環:

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

這是它!非常感謝! –