2011-08-18 264 views
1

我正在研究基于Core Data的iOS应用程序,其中我将coredata中的数组字符存储为NSData(二进制数据)。 在读取数据的同时,如何编写NSPredicate这将只检索包含给定字符串的NSData值的结果。具有NSData属性的核心数据

if name属性是一个字符串,然后我可以写下面的谓词。

NSString *inputName = @"bbb"; 
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name = %@",inputName]; 

我的问题是
会有怎样的断言,如果nameNSDataNSData

NSArray *anArray = [NSArray arrayWithObjects:@"aaa",@"bbb",@"ccc",nil]; 
NSData *arrayData = [NSArchiver archivedDataWithRootObject:anArray]; 

arrayData存储为核心数据name属性。

我希望这些信息足以了解我的问题。 在此先感谢。

+0

什么是背后的存储字符串作为'NSData'的原因是什么? – Akshay

+0

@Akshay - 例如:我有一位主管提交,它与雇员人数有关。这些雇员姓名将是一串字符串。核心数据不支持NSArray,所以我将其转换为NSData并存储在核心数据中。 – Raj

+0

@Akshay和我m不存储字符串作为NSData否则数组字符串存储为数据 – Raj

回答

1

我找到了答案..converted NSArrayNSSet并将其存储在实体

0

如果我正确理解你的问题和随后的评论,并且你正在使用一个存储为数据的数组来表示层次关系,那么你显然没有按照设计使用Core Data。

相反,我建议您创建一个独立的实体来代表员工,然后建立他们和主管之间的关系?

虽然它不是iOS特定的,但是这个tutorial by Apple表明了这个概念。

+0

让我检查它,谢谢.... – Raj

0

根据您的意见,我认为您需要重新审视您的架构。如果您的主管&员工(许多员工可以拥有相同的主管)之间有一对多关系,则应该创建一个实体Employee,并为其添加属性supervisorID。然后你可以用类似于where supervisorID="123"的方式查询你的Employee表。

如果你不能重新设计你的模式,你可以将NSData转换为NSString &使用-initWithData:encoding:将它保存在CoreData中。

HTH,

阿克沙伊