2012-07-12 28 views
5

tôi có một câu đố như chương trình nơi bạn đặt các khối lại với nhau theo đúng thứ tự để thử và hoàn thành câu đố. và khi bạn hoàn thành, bạn có thể nhấn nút phát và sau đó chương trình sẽ làm cho một người đàn ông nhỏ đi qua các khối của bạn ở những nơi mà các khối của bạn. Vì vậy, nếu bạn đặt một khối lên, một khối phải, một khối xuống, và sau đó nhấn chơi chương trình sẽ gọi sau đó gọi các phương pháp di chuyển lên, di chuyển phải, di chuyển xuống.bạn có thể lưu trữ nhiều phương pháp trong một bộ chọn không?

Khi chương trình của tôi chạy và cố gắng tìm ra phương thức để gọi và theo thứ tự nào, tôi cần lưu trữ các phương thức này theo thứ tự như chương trình tìm thấy chúng, về cơ bản, tôi không thể gọi chương trình ngay lập tức ngay khi nó tìm ra phương pháp để gọi hoặc người khác di chuyển trên các khối sẽ di chuyển nhanh như chớp, tôi muốn lưu trữ các phương pháp trong một số loại mảng phương thức (mà tôi nghĩ sẽ giống như một bộ chọn của một số loại) để tôi có thể gọi mỗi phương pháp trong một khoảng thời gian nhất định sau khi chương trình của tôi đã tìm ra mọi thứ sẽ làm.

chương trình bình thường của tôi ngay bây giờ trông giống như sau

if(random requirements) 
[self moveUp] 

else if(random requirements) 
[self moveDown] 

else if (random requirements) 
[self moveRight] 

else if(random requirements) 
[self moveLeft] 

tốt, tôi thà này trông giống như thế này

if(random requirements) 
SEL selector addMethod:[self moveUp] 

else if(random requirements) 
SEL selector addMethod:[self moveDown] 

else if (random requirements) 
SEL selector addMethod:[self moveRight] 

else if(random requirements) 
SEL selector addMethod:[self moveLeft] 

rõ ràng đây không phải là cú pháp thực nhưng có thể bạn loại hiểu thứ tôi đang tìm kiếm?

Trả lời

8

Bạn không thể lưu trữ nhiều bộ chọn trong một bộ chọn, nhưng việc tạo một mảng các bộ chọn là một điều hoàn toàn hợp lệ để thực hiện. Cách đơn giản nhất là lưu trữ các biểu diễn chuỗi của các bộ chọn của bạn trong một NSMutableArray và tạo các bộ chọn từ các chuỗi trong mã lặp qua mảng đó.

NSMutableArray *selectorNames = [NSMutableArray array]; 
if(random requirements) 
    [selectorNames addObject:NSStringFromSelector(@selector(moveUp))]; 
if(random requirements) 
    [selectorNames addObject:NSStringFromSelector(@selector(moveDown))]; 
... 
for (NSString *selectorName in selectorNames) { 
    SEL nextSelector = NSSelectorFromString (selectorName); 
    // Now you can invoke your selector 
} 

Một tùy chọn khác ngoài bộ chọn sẽ là using blocks. Các khối cũng rất tốt trong việc đóng gói các hành động, và bạn không cần phải lưu trữ mục tiêu của chúng một cách riêng biệt.

+0

Dang, hãy đánh bại tôi! –

+1

@ownageGuy Đừng lo lắng, bạn sẽ tích lũy điểm danh tiếng rất nhanh chóng khi bạn bắt đầu trả lời câu hỏi. Chúc may mắn! – dasblinkenlight

+2

Có thể tốt hơn nếu sử dụng 'NSStringFromSelector()' khi thêm chuỗi vào mảng ban đầu. –

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