2009-03-03 42 views
5

Tôi có một số mã trong ứng dụng của tôi trông giống như thế này:Tại sao Cocoa thỉnh thoảng trả về một chuỗi rỗng?

char *hash = (char*) sqlite3_column_text(get_bookmark, 0); 
NSString* postHash = [NSString stringWithUTF8String:hash]; 

này làm việc cho tôi mỗi lần; Tôi chưa bao giờ thấy nó không phải là hoạt động. Hầu hết người dùng của tôi không gặp sự cố (theo như tôi biết). Tuy nhiên tôi thấy rằng postHash là một chuỗi rỗng (@"") đối với một số người dùng một số thời gian.

Mọi người có thể giải thích lý do không?

Một số ngữ cảnh/đầu cơ khác:

Điều này dường như chỉ xảy ra trên các thiết bị cầm tay bị bẻ khóa. Có điều gì khác về họ không? Tôi thu thập rằng thường có ít bộ nhớ hơn. Bất cứ thứ gì khác có thể đóng góp ở đây?

postHash được sử dụng trong ô bảng và đôi khi được cho là được điền chính xác vì vậy tôi tự tin rằng cơ sở dữ liệu gọi nên hoạt động. Trong thực tế, nếu cơ sở dữ liệu cũng có một chuỗi rỗng thì đó là vì một đoạn mã rất giống nhau nên câu hỏi vẫn còn.

hash chắc chắn sẽ trở lại với giá trị không NULL. Nếu tôi buộc một NULL ở đây, ứng dụng bị treo. Tương tự, postHash không phải là nil vì điều đó cũng sẽ làm hỏng ứng dụng (vì lý do tương tự).

Tôi nghĩ rằng điều này có thể liên quan đến bộ nhớ. Nếu phương pháp cố phân bổ quá nhiều bộ nhớ trước khi -didReceiveMemoryWarning có thể được gọi là điều gì sẽ xảy ra? Tôi biết rằng, tại một số thời điểm, Springboard đẩy ứng dụng ra. Nhưng có thể là Cocoa trả về một chuỗi rỗng ở đây thay vì giá trị mong đợi? Tôi đã nghe nói về một vài báo cáo rằng, theo như tôi có thể nói, chỉ có thể đã được gây ra bởi một chuỗi rỗng đang có mặt, nơi một cái gì đó còn nên có mặt.

Bất kỳ suy đoán, lý thuyết hoặc ý tưởng nào khác đều được chào đón.

+0

“Nhưng có thể Cocoa trả về một chuỗi rỗng ở đây chứ không phải giá trị mong đợi?” “Chuỗi rỗng” sẽ là NULL (chuỗi C) hoặc nil (NSString).Một chuỗi rỗng là hoàn toàn khác nhau: đó là một chuỗi không có ký tự trong nó, trong khi NULL/nil là không có chuỗi nào cả. –

+0

Đó không phải là sự hiểu biết của tôi về "chuỗi rỗng" là gì. Khi tôi nói "chuỗi rỗng" ở trên, tôi có nghĩa là "chuỗi rỗng", nghĩa là @ "" trong Mục tiêu-C hoặc "" trong C. Giá trị nil/NULL khiến ứng dụng gặp sự cố. –

+0

"Null" có nghĩa là 0. Ký tự null là '\ 0'; tức là, 0. Con trỏ null là 0. Không có thứ gì như là một "chuỗi rỗng" trong C, bởi vì nếu nó là null, nó không phải là một chuỗi; nó chỉ 0. –

Trả lời

6

Tuy nhiên tôi thấy rằng postHash là một chuỗi trống (@"") đối với một số người dùng một số thời gian.

Mọi người có thể giải thích lý do không?

Vì một chuỗi rỗng (hash[0] == '\0').

+0

Tôi đồng ý rằng đây sẽ là kịch bản có khả năng nhất nhưng, như đã nêu trong câu hỏi, tôi khá tự tin rằng nó không thể là một chuỗi rỗng. –

+2

Nó không phải là "kịch bản có khả năng nhất"; đó là kịch bản * duy nhất *. NULL được bạn một ngoại lệ. Bất kỳ chuỗi không trống nào sẽ đưa bạn một chuỗi không trống. Chỉ có một chuỗi rỗng sẽ cho bạn một chuỗi rỗng. Đơn giản bằng chứng: NSLog chiều dài trong (strlen (băm)) và chiều dài ra ([postHash length]). –

4

Cuối cùng tôi đã tìm ra giải pháp cho điều này. Tôi sẽ cho Peter câu trả lời được chấp nhận như anh ấy đúng nhưng lý do mà tôi nhận được một chuỗi rỗng là ... thú vị.

Cơ sở dữ liệu được điền chính xác. Truy vấn cũng đúng. Sự khác biệt giữa điện thoại và người dùng của tôi là họ có điện thoại bị hỏng. Và hình như iPhone bị hỏng đôi khi sử dụng một phiên bản SQLite khác với các phiên bản vận chuyển của hệ điều hành iPhone.

Thay đổi trong phiên bản tiếp xúc với lỗi trong mã của tôi đã khiến một trong các tham số được đặt không chính xác và sqlite3_column_text để trả lại chuỗi trống.

+3

Có cần phải là một cách để phát hiện một điện thoại jailbroken và sau đó từ chối hỗ trợ người dùng. Bạn đã lãng phí bao nhiêu thời gian vì điều này? Nó không ở trên. – mxcl

+0

Khó khăn để chắc chắn, nhưng tôi nghĩ rằng nó đã cho tôi khoảng hai mươi giờ - và tôi chỉ tìm thấy giải pháp một cách tình cờ! Mặt khác, họ đã trả tiền cho khách hàng. Tuy nhiên, tôi đã nói rằng tôi bảo lưu quyền không hỗ trợ điện thoại bị hỏng. Tôi đã viết nhiều hơn trên blog của ứng dụng: http://www.yummyapp.com/2009/05/pirates-and-jail-break.html –

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