gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:45 25 4
gpt4 key购买 nike

我正在使用一个单例来存储一些数据,她是实现

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

最佳答案

这太奇怪了,您可能还做了其他事情来实现这一目标。为什么不使用 - (void)removeAllObjects

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

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

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

关于objective-c - 从存储在单例中的数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13267609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com