0

我已经构建了一个“深度”NSMutableDictionary,其中包含解析的 XML 数据以及可以从一个视图控制器传递到另一个视图控制器的其他相关信息。NSMutableDictionary 主要包含 NSStrings,但也包含另一个 NSMutableDictionary,更多 NSStrings,最后更深入地包含自定义对象的 NSMutableArray(它用于日历)。

现在,因为它是日历,显然涉及到日期。我使用 NSXMLParser 接收和解析的 XML 数据返回字符串,因此我必须将当天的日期转换为可用的数字。XML 中的日期采用以下格式:“MM.DD” 我为此创建了以下方法:

- (void)createDateCodesWithString:(NSString *)string 
{ 
   NSInteger monthCode;
   NSInteger dayCode;
   ....
   NSArray *dates = [string componentsSeparatedByString:@"."];
   monthCode = [[dates objectAtIndex:0] integerValue];
   dayCode = [[dates objectAtIndex:1] integerValue];
   ....
   shortDay = [NSNumber numberWithInt:dayCode];
}

'shortDay' 是一个 NSNumber* 和一个 ivar,并设置为我创建的自定义对象的属性(非原子,保留)。当我在控制台中运行 NSLog 命令时,似乎“shortDay”和其他数据已成功存储在深层 NSMutableDictionary 中。但是,当我再次尝试访问数据时,我遇到了问题。当我访问 NSString* 存储的 ivar 时,一切正常,但是当我尝试访问 NSNumber* 时,我收到错误 EXC_BAD_ACCESS 代码 1 或代码 2。这就是我尝试调用 NSNumber* 的方式

   NSNumber *number = day.shortDay;
   return [number stringValue];

问题可能是因为 NSArray *dates 将字符串剥离为月份和日期字符串,而日期字符串(长度为两个字符)可能在之前包含一个“0”,例如,如果该天是该月的 6 号,则为一个“6” ? 有什么建议吗?

如果需要,我很乐意发布更多代码。

4

1 回答 1

1

shortDay在您下次尝试访问它之前,可能正在清理内存。分配它时,请尝试以下操作:

shortDay = [[NSNumber numberWithInt:dayCode] retain];

增加引用计数(AKA 取得对象的所有权)以避免过早释放内存。

如果这解决了问题,那么您将需要调用您的类[shortDay release]dealloc方法,以便在正确的时间正确地释放它的内存。

于 2012-04-26T15:34:59.570 回答