2010-07-31 38 views
8

Tôi đã sử dụng agvtool cho một trong các ứng dụng iPhone của mình theo nguyên tắc chung và gần đây đã tìm thấy lý do tại sao tôi muốn kiểm tra biến phiên bản (để tôi có thể sao chép nội dung trợ giúp vào thư mục Tài liệu, nếu nó hết hạn). Biến, MyAppVersionNumber, được định nghĩa trong MyApp_vers.c, được tạo tự động trong khi tạo. Nó được tạo trong một tệp .o và hiển thị trong (phiên bản trước?) Của chính ứng dụng được liên kết. Cho đến nay rất tốt, nó sẽ có vẻ. Vì vậy, bây giờ tôi đã tuyên bố một extern double MyAppVersionNumber trong .m tập tin mà tôi cần phải sử dụng này (và sau đó cố gắng sử dụng nó, chỉ cần trong một tuyên bố NSLog để bắt đầu), và tôi cố gắng xây dựng cho giả lập iPhone, và gặp lỗi liên kết:Lỗi liên kết non_lazy_ptr với biến phiên bản agvtool?

"_MyAppVersionNumber", referenced from: 
     _MyAppVersionNumber$non_lazy_ptr in HelpViewController.o 
    (maybe you meant: _MyAppVersionNumber$non_lazy_ptr) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Vì vậy, tôi cần làm gì khác để liên kết này?

Tôi googled cho $ non_lazy_ptr và agvtool, và không có gì cả, và chỉ $ non_lazy_ptr, trong đó cung cấp một số thứ, nhưng chủ yếu áp dụng cho thư viện, điều này không thực sự (phải không?). Và cho đến bây giờ, tôi chưa bật lên một trang về agvtool mà thực sự nói về bất kỳ chi tiết nào về việc sử dụng các biến - những cái mà tôi đã đọc chỉ ngẫu nhiên nói để khai báo biến ngoài, mà tôi đã làm .

Bất kỳ ai quen thuộc với điều này và/hoặc có thể cung cấp bất kỳ trợ giúp nào?

Cảm ơn!

+0

Hmmm ... đã và đang làm googling hơn, và cố gắng điều khác nhau, và tôi thấy điều này: Nếu tôi đặt câu lệnh extern và tham chiếu cả vào 'main.m', nó hoạt động tốt. Sử dụng nó trong lớp điều khiển xem của tôi, tuy nhiên, không làm việc ... Có một số vấn đề với việc có một biến extern có thể truy cập thông qua một lớp (như được định nghĩa bởi '@ interface' và' @ implementation')? Tôi đã thử đặt nó bên trong '@ interface', không thành công với' error: expected specifier-qualifier-list trước 'extern'', và ở nhiều vị trí khác trong '.h' và' .m' của tôi Lỗi liên kết $ non_lazy_ptr). Tôi làm cách nào để có quyền truy cập thông qua lớp học của mình? – lindes

+0

Lưu ý: Tôi đã tìm thấy cách để giải quyết vấn đề ban đầu của mình (liên quan đến việc đảm bảo trình xem Trợ giúp của tôi xem nội dung mới nhất): Đừng sao chép tài liệu vào Tài liệu (chỉ đọc, do đó không bắt buộc). Tuy nhiên, thật tuyệt khi biết điều gì đang xảy ra, trong trường hợp tôi muốn biến này vì các lý do khác. – lindes

+0

Xin lỗi tôi không thể hiểu câu hỏi ur, đã xóa câu trả lời. –

Trả lời

1

Kể từ agvtool cập nhật giá trị CFBundleVersion của plist của bạn, tôi đề nghị truy cập vào số phiên bản tại thời gian chạy với:

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary]; 
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue]; 
Các vấn đề liên quan