2013-05-10 24 views
5

Tôi có một thao tác tải dữ liệu cần phải chạy khỏi chuỗi chính để tránh các sự cố chặn tiềm ẩn. Để làm điều này, tôi sử dụng một NSOperationQueue và NSOperations.Làm cách nào để chặn NSOperation cho đến khi NSOperationQueue kết thúc?

Một vấn đề nảy sinh, tuy nhiên, là một trong các hoạt động tồn tại để sinh ra các hoạt động bổ sung dựa trên thông tin đến. Việc cố gắng giải quyết vấn đề này cũng giải quyết được một số vấn đề nhỏ mà tôi có ở nơi khác, vì giải pháp mà tôi đã đạt được là cung cấp cho NSOperation hàng đợi của riêng nó cho các nhiệm vụ phụ.

Vấn đề là ngay sau khi thoát 'chính', NSOperation sẽ được đánh dấu là 'đã hoàn thành', bất kể có hay không hàng đợi phụ được xử lý xong; làm cách nào để ghi đè hành vi đó?

+0

Có vẻ như bạn đang tìm kiếm [đồng thời 'NSOperation'] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html)? –

+0

@CarlVeazey Không ... chính xác, nhưng có vẻ như các bước được sử dụng để tạo ra một NSOperation đồng thời làm điều tương tự tôi thực sự đang tìm kiếm. Bạn phải ghi đè cách bắt đầu xử lý phương thức isFinished/isExecuting, và tôi nghĩ đó chính xác là những gì tôi cần làm ở đây. Tôi cần phải ghi đè lên bắt đầu để nó không thiết lập isFinished ngay lập tức kết thúc chính. Có nghĩa là xử lý các công cụ KVO khi tôi thay đổi những tài sản, oh niềm vui. – RonLugge

+0

@CodaFi Tôi không chắc chắn liệu tôi có làm rõ bản thân mình hay không, nhưng câu trả lời bạn đề xuất có vẻ không hợp lý. Phụ thuộc ngăn chặn một hoạt động từ thực hiện, họ không ngăn chặn nó từ kết thúc khi nó bắt đầu thực hiện. Ít nhất, đó là những gì các tài liệu tham khảo xuất hiện để nói. – RonLugge

Trả lời

1

Bạn có thể gửi thông báo waitUntilAllOperationsAreFinished tới hàng đợi con trước khi thoát khỏi phương thức hoạt động chính của mình. Điều này là dễ dàng, nhưng không phải là một ý tưởng tốt vì nó chặn một chuỗi toàn bộ mà là khá lãng phí.

Giải pháp tốt hơn là sử dụng hệ thống phụ thuộc. Tạo một hoạt động khác có phụ thuộc vào hoạt động chính của bạn. Sau khi bạn tạo các hoạt động con bạn cũng thêm chúng như là một sự phụ thuộc vào hoạt động 'kết thúc' mới đó.

1

càng sớm càng 'chính' lối thoát hiểm, các NSOperation sẽ được đánh dấu là 'xong',

Logic này được thực hiện trong [NSOperation start], vì vậy bạn chỉ có ghi đè bằng logic tùy chỉnh của bạn : gọi main, sẽ sinh ra một số thao tác bổ sung, sau khi hoàn tất đặt trạng thái là isFinished về hoạt động.

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