Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

属性可以支持数组吗? #2

Open
lexiaoyao20 opened this issue Jul 7, 2016 · 9 comments
Open

属性可以支持数组吗? #2

lexiaoyao20 opened this issue Jul 7, 2016 · 9 comments

Comments

@lexiaoyao20
Copy link

比如有一个Person类,一个Person可以有多条Dog:

@interface Person : GYModelObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSArray<Dog*> *dogs;

@end

@interface Dog : GYModelObject

@property (nonatomic, strong) NSString *name;

@end

支持像上面这种情况吗? 如果支持的话,我们代码需要怎么写?

@Zepo
Copy link
Owner

Zepo commented Jul 7, 2016

目前不支持这种,一般来说,对于上面的情况,dogs 是要排序的,框架不知道以什么方式帮你排序。

Core Data 的做法是按加入的先后顺序排,但一般这种排序不是业务场景需要的。

对于这种情况,其实只需把上面的 dogs 定义成非持久化属性,然后自己实现 getter 方法就可以了。

@lexiaoyao20
Copy link
Author

恩,多谢回复。

@CocoaDebug
Copy link

能不能给个demo呢? 我不知道如何才能实现....谢谢!

@Zepo
Copy link
Owner

Zepo commented Jul 22, 2016

比如上面这个例子,在 + persistentProperties 返回的数组里就不要加 @"dogs" 啦。

然后自己实现 dogs 的 getter 方法:

- (NSArray<Dog *> *)dogs {
    if (!_dogs) {
        _dogs = [Dog objectsWhere:...];
    }
    return _dogs;
}

@ccnyou
Copy link

ccnyou commented Jul 22, 2016

意思是Dog单独存一个表么?那么是否也同时需要重写setDogs?
关系型数据库设计来说dog应该是一个单独表,并且有个personId 作为外键记录这个 dog 是属于谁的

@Zepo
Copy link
Owner

Zepo commented Jul 22, 2016

是的,Dogs 是个单独的表,参考主页那个例子就行了

@ccnyou ccnyou mentioned this issue Jul 25, 2016
@yhl714387953
Copy link

发现是可以存数组是字典的,数组或者字典里面内容是string 、number类型的可以存储和读取,亲自实验的啊

@Zepo
Copy link
Owner

Zepo commented Feb 8, 2017

@yhl714387953 那样是在框架内部自动转成 data 了,如果 data 太大,会影响数据库性能,用的时候要小心

@yhl714387953
Copy link

原来如此,多谢了大神……

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants