2009-08-11 34 views
5

Tôi đang cố gắng hiểu ý nghĩa của giá trị được trả về bởi [NSData writeToFile:options:error:]. Phương thức trả về BOOL, theo tài liệu của Apple là "CÓ nếu hoạt động thành công, nếu không thì KHÔNG."không thành công, nhưng không có đối tượng lỗi nào được trả về. Tại sao?

Đủ công bằng, nhưng nếu KHÔNG, tôi đã giả định rằng thông số lỗi sau đó sẽ được đặt thành giá trị NSError * có thể truy xuất được. Tuy nhiên trong kết quả tôi đang đi qua, đó không phải là trường hợp. Theo đó tôi hơi bối rối, và không biết cách xác định nguyên nhân gây ra lỗi.

Để wit, tôi đã có mã này (nhiều hơn hoặc ít hơn):

NSError* error = nil; 
BOOL success = [data writeToFile: filePath error: &error]; 
if (error) 
    NSLog(@"error = %@", [error description]); 

success hóa ra là NO trong mã Tôi đang chạy, nhưng tuyên bố NSLog không bao giờ được thực thi. Làm thế nào mà?

Howard

Trả lời

14

Có thể datanil, trong trường hợp này [data writeToFile:error:] trả về nil, nhưng *error chưa được đặt.

+3

Đó chính xác là gì. Cảm ơn bạn. Tôi chưa bao giờ bị cắn bởi thực tế bạn có thể gửi một tin nhắn đến đối tượng nil; Cuối cùng: bây giờ tôi tự coi mình là một lập trình viên Objective-C thực sự! :-) – hkatz

+1

Thông điệp đó đến đối tượng nil hầu như luôn khiến tôi mất vài giờ :) – ColdSteel

0

Phương thức writeToFile trả về TRUE thành công và FALSE khi thất bại - điều bạn thực sự muốn kiểm tra.

Vì vậy, Hãy thử:

if(!success) 

Như có điều kiện của bạn thay vì if (lỗi).

+0

Tôi đã thử thành công == KHÔNG, nhưng trong trường hợp đó (và tôi giả sử trong trường hợp thử biểu mẫu ngắn hơn của bạn), câu lệnh log được phát ra là 'error = (null)'. Đó là những gì tôi không hiểu. – hkatz

+0

IMO để xử lý lỗi tốt, bạn nên kiểm tra cả thành công và lỗi, nếu dữ liệu là 0, bạn sẽ không thành công nhưng sẽ không có lỗi, trong trường hợp này bạn nên nói điều gì đó với người dùng – ColdSteel

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