2010-10-15 35 views
9

Khi bạn tạo dự án hệ điều hành iPhone mặc định trong xCode, bạn có một main.m trong "Các nguồn khác" trên bảng điều khiển bên trong xCode. Làm thế nào để int() trong đó có sử dụng argc và argv và tại sao nó cần nó?Làm thế nào để sử dụng iOS argc và argv?

Cảm ơn :)

Trả lời

0

tôi nghĩ rằng họ có sẵn chỉ vì trình biên dịch sử dụng chúng nhưng trong trường hợp iOS chỉ là vô ích, vì có không phải là cách trực tiếp để tự động thêm đối số để gọi ứng dụng trên iPhone. Hoặc ít nhất tôi giả sử ..

+0

Hmm, suy nghĩ thú vị. ok cảm ơn bạn đã phản hồi. Tôi hy vọng ai đó có một cái nhìn sâu sắc hơn một chút. cảm ơn một lần nữa! – Tim

6

Mở thông tin về tệp thực thi của bạn. Trong tab đối số có arguments to be passed on launch:. Nếu bạn thêm thứ gì đó ở đó, nó sẽ được chuyển đến ứng dụng của bạn.
Apple đã tạo một số đối số mà bạn đặt ở đó và họ thay đổi hành vi của ứng dụng. -com.apple.CoreData.SQLDebug 1 ví dụ sẽ in một số thông báo gỡ lỗi sql nếu bạn sử dụng coredata. Tôi chắc chắn có nhiều đối số gỡ lỗi hơn

int count; 
for (count = 0; count < argc; count++) 
{ 
    NSLog(@"argv[%d] = %s\n", count, argv[count]); 
} 

CHỈNH SỬA: các đối số đó chỉ được sử dụng nếu bạn khởi động ứng dụng bằng xcode.

+0

Xin lỗi, tôi mới làm quen với điều này. Tệp nào có thể thực thi trong mẫu iOS mặc định? – Tim

+0

Trong thanh bên xcode của bạn có một số nhóm, một nhóm được đặt tên giống như dự án của bạn, và có các mục tiêu, thực thi, kết quả tìm kiếm, v.v. Mở nhóm thực thi, nên có một mục, tệp thực thi của bạn. Bấm đúp vào nó để có được thông tin. –

+0

Ahh tôi hiểu rồi. Cảm ơn bạn ~ – Tim

0

Đây chỉ là một biểu hiện của Objective-C là một superset của C.

Trên Mac OS X, bạn có thể sử dụng để truyền tham số cho một ứng dụng bằng cách gọi nó từ Terminal, chẳng hạn như (có thể không làm việc):

/Applications/iTunes.app/Contents/MacOS/iTunes my args to application 

Trên iOS, không có khả năng khởi chạy ứng dụng từ dòng lệnh.

+0

Đó là những gì tôi đã suy nghĩ. Vì vậy, họ không thực sự làm bất cứ điều gì trong dự án, họ chỉ có theo mặc định? – Tim

2

Xem: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html

Các thông số argc và argv chứa bất kỳ đối số ra mắt thời gian qua để ứng dụng từ hệ thống. Các đối số này được phân tích theo cơ sở hạ tầng UIKit và nếu không có thể bị bỏ qua.

Về cơ bản, UIApplicationMain() tạo đối tượng đơn lẻ Đại biểu ứng dụng. Chúng không chỉ rõ giao thức khởi tạo trong các tài liệu, nhưng có vẻ như argc/argv được chuyển tới UIApplication trong một số kiểu khởi tạo và sau đó UIApplication phân tích chúng và biến chúng thành thông tin (có thể là các tùy chọn khởi chạy) có thể được truy cập thông qua UIApplication.

Trong mọi trường hợp, argc/argv được dành khá nhiều để sử dụng hệ thống trong các ứng dụng iOS. Hệ thống dường như sử dụng chúng để truyền nội dung tới UIApplication, về cơ bản.

EDIT

Là một thử nghiệm, tôi chèn sau trong() chức năng chính của tôi:

for (int i; i < argc; i++) 
    NSLog(@"%s", argv[i]); 

Khi tôi đưa ra nó trong mô phỏng nó chỉ đơn giản in one "tranh luận" (argv [ 0]) là đường dẫn của ứng dụng.

Tôi nghi ngờ nếu bạn đặt mã này vào đây và khởi chạy ứng dụng đăng ký trình xử lý URL hoặc mở vì thông báo cục bộ hoặc một số sự kiện hệ thống khác thì bạn sẽ thấy URL hoặc bất kỳ tùy chọn nào liên quan đến cách ứng dụng được mở . Tuy nhiên, bạn là không phải phải tự phân tích cú pháp argc/argv []! Sử dụng các tùy chọn khởi chạy ứng dụng được cung cấp cho phương thức UIApplicationDelegate application:didFinishLaunchingWithOptions:.

+0

Tôi vừa kiểm tra điều đó và khi ứng dụng của tôi được bắt đầu qua "mở trong", không có đối số nào được chuyển đến ứng dụng. –

+0

Ồ, tôi đoán là tôi đã đoán sai rồi. Tôi tò mò mặc dù, bạn có một danh sách đầy đủ các tùy chọn gỡ lỗi hợp lệ như điều -com.apple.CoreData.SQLDebug? Tôi không biết cái đó tồn tại và nó có thể có ích cho tôi. – Nimrod

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