2010-02-19 30 views
5

Có thể sử dụng liệt kê nhanh với NSArray có chứa NSDictionary không?Liệt kê nhanh Với NSMutableArray chứa NSDictionary

Tôi đang chạy qua một số hướng dẫn C Mục tiêu, và đoạn mã sau đá giao diện điều khiển vào chế độ GDB

NSMutableArray *myObjects = [NSMutableArray array]; 
NSArray *theObjects = [NSArray arrayWithObjects:@"easy as 1",@"easy as two", @"Easy as Three"]; 
NSArray *theKeys = [NSArray arrayWithObjects:@"A",@"B",@"C"];  
NSDictionary *theDict = [NSDictionary dictionaryWithObjects:theObjects forKeys:theKeys]; 
[myObjects addObject:theDict]; 

for(id item in myObjects) 
{ 
    NSLog(@"Found an Item: %@",item); 
} 

Nếu tôi thay thế các vòng lặp liệt kê nhanh với một vòng lặp đếm truyền thống

int count = [myObjects count]; 
for(int i=0;i<count;i++) 
{ 
    id item; 
    item = [myObjects objectAtIndex:i]; 
    NSLog(@"Found an Item: %@",item); 
} 

Ứng dụng chạy mà không có sự cố và từ điển sẽ xuất ra cửa sổ bảng điều khiển.

Đây có phải là giới hạn của liệt kê nhanh hay tôi thiếu một số ngôn ngữ phụ? Có gotchas khác khi làm tổ bộ sưu tập như thế này?

Đối với điểm thưởng, làm cách nào tôi có thể sử dụng GDB để tự gỡ lỗi bản thân này?

Trả lời

10

Rất tiếc! arrayWithObjects: cần phải không được chấm dứt. Mã sau đây chỉ chạy tốt:

NSMutableArray *myObjects = [NSMutableArray array]; 
NSArray *theObjects = [NSArray arrayWithObjects:@"easy as 1",@"easy as two", @"Easy as Three",nil]; 
NSArray *theKeys = [NSArray arrayWithObjects:@"A",@"B",@"C",nil];  
NSDictionary *theDict = [NSDictionary dictionaryWithObjects:theObjects forKeys:theKeys]; 
[myObjects addObject:theDict]; 

for(id item in myObjects) 
{ 
    NSLog(@"Found an Item: %@",item); 
} 

Tôi không chắc tại sao sử dụng vòng lặp truyền thống ẩn lỗi này.

+0

Ah, một trong những Chủ đề yêu thích của tôi. "Điều bạn nghĩ là hoạt động chính xác không nên". Cảm ơn lời khuyên dành cho người mới! –

+3

Nếu bạn bật -Wformat (“Đánh máy cuộc gọi đến printf/scanf” trong Xcode), trình biên dịch sẽ cảnh báo về điều này. Nếu bạn cũng bật -Werror ("Xử lý cảnh báo dưới dạng lỗi" trong Xcode), trình biên dịch sẽ không biên dịch sai lầm này. –

+0

Cảm ơn Peter, rất hữu ích! –

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