2015-03-04 12 views
5

Tài liệu của Realm nói rằng RLMResults đang liếm NSArray. Tôi có một số kết quả được trả về từ cơ sở dữ liệu và tôi muốn hợp nhất nó thành một số khác RLMResults. Nhưng có vẻ như nó không thay đổi, Làm cách nào để thêm một đối tượng từ RLMResults? hoặc làm cho nó có thể thay đổi? hoặc chuyển đổi nó thành NSArray?Cách làm cho RLMResults có thể thay đổi?

+0

Đang cố gắng trả lời câu hỏi của bạn và thực sự bắt đầu ghét thiết kế API này haha. Tại sao bạn cần kết hợp RLMResults? –

+0

@MillieSmith Tôi cần phải kết hợp RLMResults với RLMResults. –

+0

Bạn có thể chia sẻ thêm về những gì bạn đang cố gắng làm không? Một mẫu mã nhỏ sẽ là tốt. Đây có thể là điều mà chúng tôi có thể xem xét dựa trên các trường hợp sử dụng – yoshyosh

Trả lời

3

Hiện tại, đây là điều bạn phải làm theo cách thủ công. Bạn có thể tạo một RLMArray bằng cách nối hai kết quả của bạn.

Chúng tôi đang thảo luận về phương thức hợp nhất/hợp nhất tiếp tục xuống trên lộ trình cho RLMObjects cùng loại mặc dù.

Bất kỳ bit, bạn có thể chia sẻ sẽ giúp chúng ta hiểu được những trường hợp sử dụng và có khả năng ảnh hưởng đến thiết kế api

Chừng nào họ là cùng loại, sau đây là một ví dụ generic

let currentTask = Task.objectsWhere("name = %@", "First task").firstObject() as Task 
let currentRecords = currentTask.records 
let arrayOfRecords = RLMArray(objectClassName: "Record") 

arrayOfRecords.addObjects(currentRecords) 

let futureTask = Task.objectsWhere("name = %@", "Future task").firstObject() as Task 
let futureRecords = futureTask.records 

arrayOfRecords.addObjects(futureRecords) 
+0

Bạn có thể cung cấp mã để chuyển đổi đối tượng RLMResults thành đối tượng RLMArray không? Tôi không thể tìm ra cách để làm điều đó, và về cơ bản nó sẽ là câu trả lời cho câu hỏi của OP. Nó cũng có vẻ lạ với tôi rằng RLMArray không thể được khởi tạo, vì bạn có thể tùy ý thêm các đối tượng vào một cá thể. Ngoài ra, đây là một chút trong phạm vi của câu hỏi, nhưng trong RLMResults, việc sử dụng firstObject và lastObject là gì? Tôi không thể tìm cách để lấy các vật dụng khác từ những thứ đó. Đây có lẽ là những câu hỏi ngây thơ - tôi mới đến thư viện. –

+0

Không vấn đề gì, tôi đã chỉnh sửa ví dụ của mình để bao gồm điều này. Nó có thể được khởi tạo với một kiểu. Làm thế nào bạn đang cố gắng để nhanh chóng nó? Không chắc chắn câu hỏi cuối cùng là gì, nhưng tôi sử dụng firstObject rất nhiều như bạn thấy trong ví dụ trên kể từ Task.objectsWhere ... sẽ trả về một RLMResults, khi tôi chỉ tìm kiếm một Task. lastObject có thể được sử dụng khi bạn muốn biết Tác vụ cuối cùng đã được thêm vào dựa trên tiêu chí tìm kiếm của bạn – yoshyosh

1

tôi phát hiện ra giải pháp từ duemunk: https://github.com/realm/realm-cocoa/issues/1046

về cơ bản tôi chuyển đổi RLMResults tới [RLMObject]: func toArray<T>(ofType: T.Type) -> [T] { var array = [T]() for result in self { if let result = result as? T { array.append(result) } } return array }

let tracks = Track.allObjects().toArray(Track.self) // tracks is of type [Track]

Các vấn đề liên quan