从存储在单例中的数组中删除对象

时间:2012-11-07 10:18:56

标签: objective-c macos algorithm nsarray

我正在使用单身人士来存储一些数据,她就是实施

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

1 个答案:

答案 0 :(得分:1)

这很奇怪,你可能已经做了别的事情来实现这个目标。你为什么不用- (void)removeAllObjects

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

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

只需注意,您无需检查if (sharedData == nil)中的sharedData,只要保证只执行一次即可。 (除非你在你的静态变量之外做一些事情,但这不是我应该怎么做的事情我相信)