数据未写入 NSMutableArray

Posted

技术标签:

【中文标题】数据未写入 NSMutableArray【英文标题】:data not being written to NSMutableArray 【发布时间】:2013-09-07 22:10:26 【问题描述】:

我有一个 ios 应用程序,它从服务器中提取数据并使用 CoreData 将其持久化。我有一个 UITableView,我试图只从给定的核心数据属性中选择部分来填充它。

在填充表格之前,我循环浏览数据并将我想要的内容传递给NSMutableArray。问题是当我找到我想要的项目时,它没有被添加到数组中。

我在我的 .h 文件中声明数组,如下所示...

@property (strong, nonatomic) NSMutableArray *theNewSource;

并在.m文件中合成它

@synthesize theNewSource = _theNewSource;

方法如下……

-(NSMutableArray *)setDataSourceArray


    for(int i = 0; i < rcount ; i++)
    
        NSIndexPath *countingInteger = [NSIndexPath indexPathForItem:i inSection:0];
        NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:countingInteger];
        NSString *action = [object valueForKey:@"theActionName"];

        if (![action isEqual:@"Login"])
                    
            [_theNewSource addObject:action];
        
    
    NSLog(@"the array is now %@",_theNewSource);
    return _theNewSource;


我在[_theNewSource addObject:action] 行中设置了一个断点。我可以在控制台中看到变量action 确实有一个值,但它从未添加到_theNewSource 数组中......我确定这是Objective C 101,但我无法弄清楚。请帮忙!

【问题讨论】:

顺便说一句 - 这似乎需要做很多工作,因为您可以在 NSFetchedResultsController 的获取请求中将其设置为谓词。 Abizern,我浏览了一些 CoreData 文档,因为我认为有一种方法可以使用 fetch 请求但我忽略了谓词。 Jsdodgers 解决了我的问题,但如果可以的话,我想避免这种方法。你能给我举一个如何使用谓词的例子吗?如您所见,我从中提取的 CoreData 属性是“theActionName”。当我从属性中获取数据时,我只想省略“登录”操作可以使用谓词吗? 复制了大约 100 个其他人。必须创建数组。 【参考方案1】:

您甚至创建了_theNewSource 数组吗?您似乎没有执行以下操作:

_theNewSource = [[NSMutableArray alloc] init];

在尝试使用实例之前,请确保您正在创建实例。

【讨论】:

哇,好尴尬!我尝试过一次,但格式错误我试图使用NSMutableArray *_theNewSource 创建它,但它给了我一个错误,所以我删除了它!这就是诀窍,感谢 Jsdodgers! @Ben - 请注意,您应该在 init 例程中执行此操作。【参考方案2】:

您应该直接在 NSFetchedResultsController 的 fetchRequest 中使用谓词:

[NSPredicate predicateWithFormat:@"theActionName != %@", @"Login"];

NSFetchResultsControllers 对于驱动表视图和集合视图特别有用,因此过滤它们的结果以创建单独的数据源是一种代码味道。

这样做意味着您可以直接使用 NSFetchedResultsController 作为表的数据源,而不是使用它来创建过滤数组来充当数据源。

【讨论】:

Abizern 这就是我一直在寻找的。我已经实现了这个并且现在正在使用它。这比创建一个新数组要容易得多。我发布了另一个关于如何在填充表格时过滤数据的问题,并收到了多个建议来创建一个单独的数组并将其用作数据源。在我看来,这是满足我需求的更好方法!谢谢! 我很高兴它有帮助。这就是为什么我更喜欢解决实际问题而不是直接回答问题。

以上是关于数据未写入 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章

数据未写入 NSMutableArray

Python Boto3 - 数据未正确写入DynamoDB

使用 saveAsTable 将 parquet 数据写入 S3 未完成

抓取的网站数据未写入 CSV

数据未从 Android 写入 Firebase 数据库

C - 最后捕获的数据项未写入文件