2013-04-02 21 views
6

Tôi đang xử lý vấn đề tham nhũng trong lớp GKTurnBasedMatch của Game Kit (xem this thread) đôi khi dẫn đến trạng thái trò chơi không hợp lệ, với matchData bị hỏng.Làm cách nào để xác định đối tượng NSData trống xuất hiện dưới dạng dấu ngoặc trống?

Để giải quyết sự cố này, tôi đang tạo một cách để xác định các kết quả phù hợp không hợp lệ này để tôi có thể xử lý chúng một cách thích hợp. MatchData bị hỏng có vẻ như là một cách hay để thực hiện điều này. Tuy nhiên, cho đến nay tôi đã không thể xác định chúng. Khi tôi làm điều này:

// "match" is an existing GKTurnBasedMatch object 
NSLog(@"match data is: %@",[match matchData]); 
NSLog(@"match data is nil? %@",[match matchData] == nil ? @"YES" : @"NO"); 
NSLog(@"match data equals empty nsdata? %@",[match matchData] == [NSData data] ? @"YES" : @"NO"); 

tôi nhận được như sau:

match data is: <> 
match data is nil? NO 
match data equals empty nsdata? NO 

Vì vậy, các dữ liệu kết hợp được hiển thị như một cặp dấu ngoặc rỗng "<>", mà tôi hy vọng có thể được xác định là nil, nhưng rõ ràng là không.

Ngẫu nhiên, tôi lưu trữ matchData này trong thực thể dữ liệu cốt lõi, trong thuộc tính NSData. Và khi tôi lưu NSManagedObjectContext, sau đó NSLog NSManagedObject để xem có gì trong đó, thuộc tính NSData trong câu hỏi vẫn là hiển thị dưới dạng "<>"!

Tuy nhiên, nếu tôi sau đó tạo ra một mới NSManagedObjectContext, truy xuất cùng NSManagedObject ra khỏi nó, sau đó NSLog giá trị của nó, là NSData thuộc tính hiện nay xuất hiện như nil.

Vì vậy, có vẻ như tại một số thời điểm, dữ liệu lõi là "làm sạch" thuộc tính cho cửa sổ bật lên nil giá trị của nó. Vấn đề của tôi là tôi thực sự cần phải xác định giá trị này là niltrước điểm đó, tại thời điểm tôi thêm nó vào kho dữ liệu cốt lõi.

Trả lời

18

Bạn đang so sánh các trường hợp đối tượng trong trường hợp cuối cùng của mình. Cả hai trường hợp có thể trống và kết quả sẽ không đúng.

Hãy thử điều này:

NSLog(@"match data equals empty nsdata? %@",[[match matchData] length] == 0 ? @"YES" : @"NO"); 
+0

Điều đó đã thực hiện mẹo, cảm ơn! – todd412

+0

Đã có cùng một vấn đề. Câu trả lời hoàn hảo. – mondousage

3

[NSData data] trả về đối tượng NSData mới, sẽ không bao giờ == đối tượng hiện có. Để kiểm tra xem đó có phải là NSData trống không:

[[match matchData] isKindOfClass:[NSData class]] && match.length == 0 
2

CoreData không làm thay đổi các giá trị bạn đặt trên NSManagedObject dụ. Bạn phải đặt giá trị NSData trống.

Để kiểm tra xem đó có phải là dữ liệu trống không, hãy kiểm tra thuộc tính length của nó. Nó phải là 0 khi trống.

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