2011-08-10 22 views
10

Vì vậy, tôi đã cố gắng thử nghiệm ứng dụng PhoneGap mà tôi đang thực hiện và đã gặp một số sự cố với thử nghiệm trên iPad của mình. Tôi có những điều sau đây là phương pháp main cho ứng dụng này:Thử nghiệm iPad của ứng dụng PhoneGap - các vấn đề trong phương pháp chính

// 
// main.m 
// elog 
// 
// Created by Ben Potter on 9/08/11. 
// Copyright Arden Anglican School 2011. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
    [pool release]; 
    return retVal; 
} 

Tất cả đều hoạt động tốt cho đến khi bạn đóng ứng dụng hoàn toàn và sau đó mở lại nó, khi mà nó bị đóng băng. Và tôi không biết tại sao.

Tôi đang chạy ios5 trên ipad của tôi với XCode 4.2

Cuối cùng, đây là những lỗi mà đi lên, nhờ sự giúp đỡ!

Main method errors Direct link here

+0

XCode 4.2 và iOS 5 vẫn đang trong quá NDA. Thông báo lỗi của bạn đang nói khối lượng btw. Xem tại đây - http://stackoverflow.com/questions/6655842/nsautoreleasepool-is-unavailable. – Perception

Trả lời

19

ứng dụng bạn đang sử dụng tự động đếm tham chiếu (đó là mới) và PhoneGap không hỗ trợ nó được nêu ra. Chuyển đến cài đặt xây dựng của dự án và bật tính năng Tự động tham chiếu Đếm.

+2

Tôi có thể tìm cài đặt bản dựng ở đâu? –

+0

Tôi không thể nói nhiều hơn - vì đây là dưới NDA. Tuy nhiên, nếu bạn chọn dự án chính của bạn trong bảng điều khiển bên trái và sau đó chọn tab cài đặt xây dựng - bạn sẽ tìm thấy những gì bạn muốn. – dtuckernet

+0

Nó vẫn nói rằng tôi có vấn đề, vì vậy tôi đã kết thúc quay trở lại iPad của tôi lại đến 4,3 –

9

Đây là cách tôi giải quyết lỗi "NSAutoReleasePool" trong XCode 4.3 và với PhoneGap 1.5.

  1. Đi tới "YourApplicationName" trong Điều hướng dự án.

  2. Chọn "YourApplicationName" trong Project.

  3. Đi tới Cài đặt bản dựng.

  4. Đảm bảo chuyển "Tất cả" và "Kết hợp".

  5. Tìm phần "Trình biên dịch LLVM của Apple 3.1 - Ngôn ngữ".

  6. Cuộn xuống và bạn sẽ tìm thấy "Số lần tham chiếu tự động mục tiêu-C".

  7. Thay đổi nó từ Yes để số

Cố gắng xây dựng dự án của bạn một lần nữa và bạn sẽ ổn thôi!

+0

Choáng! Tôi luôn thay đổi từ Apple LLVM thành LLVM GCC, nhưng điều này chỉ phần nào khắc phục được vấn đề. Lời khuyên của bạn đã giải quyết nó một lần và cho tất cả, và tôi có thể sử dụng Apple LLVM. Cảm ơn. – Jack

0

Nếu bạn không muốn vô hiệu hóa ARC, khi đó phần sau sẽ khắc phục lỗi trong Xcode 4.2.

AppDelegate.m

// self.window = [[[UIWindow alloc] initWithFrame:screenBounds]autorelease]; 
     self.window = [[UIWindow alloc] initWithFrame:screenBounds]; 

    // self.viewController = [[[MainViewController alloc] init] autorelease]; 
     self.viewController = [[MainViewController alloc] init]; 

(void) dealloc 
{ 
    // [super dealloc]; 
} 

main.m

int main(int argc, char *argv[]) { 
// NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
// int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
// [pool release]; 
// return retVal; 
    @autoreleasepool { 
    NSLog (@"Programming is fun!"); 
    } 
    return 0;  
} 

Disclaimer:

Không chắc chắn cách này ảnh hưởng đến phần còn lại của PhoneGap lib một plugin mặc dù . Tuy nhiên, sau khi thực hiện những thay đổi này, dự án mẫu PhoneGap chạy trên trình mô phỏng, nhưng kết thúc ngay lập tức. Đây chỉ là một điểm khởi đầu.

Better Alternative:

tôi đề nghị bạn vô hiệu hóa tự động đếm tham chiếu (ARC) trong phần Settings xây dựng cho đến khi PhoneGap hỗ trợ nó. Chủ đề này trên diễn đàn PhoneGap gợi ý rằng ARC may be supported in PhoneGap 1.6.

1

Vì vậy, chỉ cần làm rõ trực quan, tôi mất vài phút để tìm tùy chọn chính xác vì nó chỉ được đề cập trong phần bình luận của câu trả lời khác. Tôi phải tìm cờ xây dựng CLANG_ENABLE_OBJC_ARC và chuyển sang NO. Bạn sẽ tìm thấy nó dưới các thiết lập xây dựng trong phần User-Defined (rất đáy đối với tôi):

enter image description here

Tôi cũng đã có thể vượt qua các lỗi thời gian chạy bằng cách vào main.m và cho ý kiến ​​ra NSAutoreleasePool mã thiết lập như vậy:

//NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
//[pool release]; 
return retVal; 

Tuy nhiên, tôi không chắc chắn về những hiệu ứng khác có thể có trong dòng. Có vẻ như hiện nay, trong khi làm việc với PhoneGap, có lẽ tốt nhất là nên gắn bó với tính năng đếm thủ công cho đến khi PhoneGap hỗ trợ đúng ARC.

Và chỉ dành riêng cho Google, lỗi dẫn tôi đến đây là "NSAutoreleasePool là không có sẵn" như tôi không thấy rằng dưới dạng văn bản trong các bài bản gốc.

0

Trước cordova 2.1.0 ARC không được hỗ trợ, bạn không phải đánh dấu vào ô bên dưới (khi bạn vẫn đang tạo ra dự án của bạn): enter image description here

Tuy nhiên, đây là mã chính xác mà bạn cần:

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 

@autoreleasepool { 
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
    return retVal; 
    } 
} 

Nếu bạn nâng cấp lên 2.1.0 cordova trong Xcode 4.5.1 bạn có thể vào: Sửa Refactor Các lựa chọn giữa Mục tiêu ARC và cú pháp Objective-C hiện đại. enter image description here

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