2010-03-08 28 views
11

SO Tôi muốn kiểm tra xem mục trong mảng của tôi [clientDataArray objectForKey:@"ClientCompany"] có phải là nil hay không.Mục tiêu-C cách kiểm tra xem chuỗi có là không

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
    if (temp != [NSNull null]) infofieldCompany.text = temp; 

Cho đến nay tôi đã có thể đạt được điều này thông qua các mã trên, nhưng nó cho tôi những lời cảnh báo

  • cảnh báo: NSArray có thể không đáp ứng với -objectForKey:
  • cảnh báo: so sánh rõ rệt loại Objective-C struct NSNull *struct NSString * thiếu một dàn diễn viên

Quan tâm chính của tôi là cảnh báo thứ hai, nhưng cảnh báo đầu tiên cũng khiến tôi quan tâm. Tôi nên điều chỉnh mã trên của mình như thế nào?

+0

Các clientDataArray thực sự là một NSDictionary, nhưng được công bố như mảng, do đó cảnh báo. – oberbaum

Trả lời

19

Cảnh báo đầu tiên của bạn có vẻ như bạn đang cố gắng gọi objectForKey trên NSArray. Mà sẽ không hoạt động, vì NSArray không có phương thức objectForKey.

Đối với các cảnh báo thứ hai bạn chỉ có thể so sánh trực tiếp với con số không, ví dụ:

if (temp != nil) 

hoặc kể từ con số không tương đương với 0, bạn cũng có thể chỉ cần làm:

if (temp) 
+0

vâng, tôi nên làm điều đó. Đẹp và đơn giản quá. Dòng đầu tiên tôi đăng không thực sự hoạt động tốt, nhưng tôi sẽ có một suy nghĩ về nó. – oberbaum

+0

Xin lưu ý rằng điều này sẽ không xảy ra nếu temp là một NSString. Sử dụng câu trả lời của Robinsons – Abramodj

0

Tôi nghĩ rằng vấn đề là (tôi có nghĩa là cảnh báo thứ hai) là bạn đang so sánh đối tượng NSString, có thể được đặt thành null cho một đối tượng NSNull.

Bạn đã thử cách kiểm tra C thông thường cho null chưa?

if(temp) { 
// It's not null, do something. 
} 

Tôi không chắc chắn 100% về vấn đề này nhưng bạn có thể dùng thử. Nếu bạn đã làm, xin lỗi vì không thể cung cấp thêm thông tin hữu ích.

Chúc may mắn!

14

Cả hai câu trả lời trước đó được bỏ qua một điểm cơ bản: bạn không thể đặt nil vào một mảng, vì vậy bạn sẽ không bao giờ nhận được nil trong một mảng. Sử dụng NSNull làm trình giữ chỗ trong một mảng là điều đúng để làm, tuy nhiên biến số temp của bạn sau đó không thể được khai báo là NSString *, vì nó có thể không phải là một. Sử dụng NSObject * hoặc id làm loại biến để chặn cảnh báo so sánh.

+3

hoặc làm [string isEqual: [NSNull null]] –

0

Singlet NSNull có thể được sử dụng để tạo các mảng "xen kẽ" như obj0, obj1, obj2, NSNull, obj3, NSNull, ..., không.

cảnh báo: 'NSArray' có thể không đáp ứng to'-objectForKey:'

NSArray không thực hiện objectForKey.
Mã của bạn sẽ bị lỗi khi chạy (nếu clientDataArray đã được cấp phát và khởi tạo) Bạn có thể truy cập phần tử mảng theo chỉ mục (objectAtIndex:).
Nếu bạn cần liên kết các đối tượng bằng các phím, hãy xem NSDictionary.

0

if (! Temp = nil)

hoặc kể từ con số không tương đương với 0, bạn cũng có thể chỉ cần làm:

if (tạm thời)

Tôi không phải là bằng cách nào căng của trí tưởng tượng một chuyên gia Obj-C hoặc Cocoa, trong C/C++ bạn có thể sử dụng một cái gì đó như:

if (somePtr! = NULL)

Và, trừ khi bạn rõ ràng, đặt nó thành NULL hoặc thay đổi những gì nó trỏ đến, bạn có thể chắc chắn, thực tế là không phải Null hoặc Null (bạn đã bao giờ tìm kiếm ...)

Nhưng tôi đã nhận thấy (kinh nghiệm cá nhân của tôi anyway) mà trong obj-C,

Nếu bạn làm điều gì đó như: if (someObj = nil!) hoặc ngược lại,

không có bảo lãnh, nó sẽ cho bạn biết trạng thái REAL của nó ...

Vì vậy, (sau khi giao dịch với một nhóm c phát ban) khi tôi đối phó với Obj-C (BS), để được an toàn, tôi luôn luôn có một BOOL hoặc cờ được thiết lập để theo dõi trạng thái của nó, vì vậy bạn không kết thúc Free-ing, xin lỗi ... "Release- ing" cái gì đó đã được deallocated ...

16

Sau khi thử tất cả các tùy chọn, tôi nghĩ rằng đây là lựa chọn tốt nhất để comapre NSString rỗng

if (temp != (NSString *) [ NSNull null ]) 
{ 
    // do some thing 
} 
+0

Lợi ích nào có trên 'temp! = Nil'? – Matthew

0

Mặc dù câu hỏi này là cũ, tôi hy vọng trả lời của tôi sẽ giúp một số người khác.

Bạn có thể thử

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp; 
2

Giải pháp tốt nhất này để kiểm tra các giá trị NULL hoặc rỗng:

if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0) 
{ 
    yourObj.yourString = @""; 
} 
1

Quiet đơn giản

if (myString == nil){ 
    NSLog(@"myString is null"); 
} 
Các vấn đề liên quan