数据未写入 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的主要内容,如果未能解决你的问题,请参考以下文章
Python Boto3 - 数据未正确写入DynamoDB