1

我和一个单身人士一起工作来存储一些数据,她是实现

 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。问题是什么 ?

4

1 回答 1

1

这很奇怪,你可能已经做了其他事情来实现这一点。你为什么不使用- (void)removeAllObjects

也许您在 while 循环的最后一行删除对象,即:

while ([[[ApplicationData sharedData]list] count] != 0)
{
    // remove object from list
    // ...
    [[[ApplicationData sharedData]list] removeLastObject];
}

请注意,只要保证只执行一次,您就不需要签if (sharedData == nil)入。sharedData(除非你在静态变量之外做一些事情,但我相信这不是应该做的)

于 2012-11-07T10:45:48.700 回答