我正在使用单身人士来存储一些数据,她就是实施
static ApplicationData *sharedData = nil;
@implementation ApplicationData
@synthesize list;
+ (id)sharedData
{
static dispatch_once_t dis;
dispatch_once(&dis, ^{
if (sharedData == nil) sharedData = [[self alloc] init];
});
return sharedData;
}
- (id)init
{
if (self = [super init])
{
list = [[NSMutableArray alloc]init];
}
return self;
}
如果列表少于3(2<)对象,则应用程序崩溃,“索引0超出空数组的界限”
// NSMutableArray *anArray = [[NSMutableArray alloc]initWithObjects:@"", nil];
while ([[[ApplicationData sharedData]list] lastObject] != nil)
{
File *file = [[[ApplicationData sharedData]list] lastObject];
BOOL isDir;
if (![[NSFileManager defaultManager] fileExistsAtPath:file.filePath isDirectory:&isDir])
{
NSMutableDictionary *tmpDic = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:file.fileName,file.filePath,logEnteryErrorfileNotFoundDisplayName,[formatter stringFromDate:[NSDate date]], nil] forKeys:[NSArray arrayWithObjects:logShredFileName,logShredFilePath,logShredStatue,logShredDate, nil]];
[logArray addObject:tmpDic];
errorOccured = YES;
[[[ApplicationData sharedData]list] removeLastObject];
continue;
}
... other code
}
如果我使用完美工作的anArray。 有什么问题?
答案 0 :(得分:1)
这很奇怪,你可能已经做了别的事情来实现这个目标。你为什么不用- (void)removeAllObjects
?
也许您在while循环中移除最后一行的对象,即:
while ([[[ApplicationData sharedData]list] count] != 0)
{
// remove object from list
// ...
[[[ApplicationData sharedData]list] removeLastObject];
}
只需注意,您无需检查if (sharedData == nil)
中的sharedData
,只要保证只执行一次即可。 (除非你在你的静态变量之外做一些事情,但这不是我应该怎么做的事情我相信)