Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 传递数据集_Objective C_Cocoa_Macos_Sqlite - Fatal编程技术网

Objective c 传递数据集

Objective c 传递数据集,objective-c,cocoa,macos,sqlite,Objective C,Cocoa,Macos,Sqlite,这是我思考了很久的问题。我主要是一名.net开发人员,涉足iPhone和Mac的Objective-C 如何在objective-c中的方法之间发送“数据集”。例如,在C#中,您可以使用数据填充自定义类,并在自定义类的类型列表中传递它。例如,如果您有一个客户类,您只需执行以下操作: List<Customer> customers = DataLayer.GetAllCustomers(); List customers=DataLayer.GetAllCustomers();

这是我思考了很久的问题。我主要是一名.net开发人员,涉足iPhone和Mac的Objective-C

如何在objective-c中的方法之间发送“数据集”。例如,在C#中,您可以使用数据填充自定义类,并在自定义类的类型列表中传递它。例如,如果您有一个客户类,您只需执行以下操作:

List<Customer> customers = DataLayer.GetAllCustomers();
List customers=DataLayer.GetAllCustomers();

我能看到如何在obj-c中实现这一点的唯一方法是用自定义对象填充NSArray?这是一种有效的做事方式吗?还有其他建议吗?我正在使用sqlite作为我想要返回的数据库/数据。

您走对了方向

Cocoa的集合类都有可变和不可变的变体,它们是:

  • NSArray:有序,可以多次包含对象
  • NSDictionary:无序,从键映射到值,复制键
  • NSSet:无序,只能包含一个对象一次
  • NSCountedSet:无序,可以多次包含对象
不变的变体对提高效率有很大帮助。具有可变变体的类的访问器的标准模式是复制而不是保留。通过使用属性上的
copy
属性,在
@property
机制中对其进行编码:

// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end
这意味着,如果将可变数组传递给接受数组的对象,它将被复制,如果将该数组传递给其他对象,它将再次被复制。诀窍在于,“复制”一个不可变的对象实际上只是保留它,所以你只需要点击第一个拷贝。您可能希望在第一次创建副本,这样就不会将可变数组传递给其他对象,然后在传递到的任何对象后面对其进行变异

对于MacOSX上的Cocoa,我还强烈建议您查看核心数据。它是从.NET/ADO/etc使用的“数据集”模式的替代方案。对于核心数据,您不会“获取所有客户”,然后将收集的数据传递给其他人。相反,您可以查询您关心的客户,当您遍历所查询对象的关系时,其他对象将自动为您拉入


核心数据还提供了一些功能,如实体的可视化建模、自动生成属性getter和setter、对从一个模式版本到另一个模式版本的迁移进行细粒度控制等等。

此外,您可能还需要在SQLLite周围寻找轻量级包装器,以便更轻松地从数据库创建对象。