2012-02-29 35 views
8

Tôi gặp sự cố khi cố gắng sử dụng FMDatabase.Lỗi khi cố gắng sử dụng trình bao bọc SQLite FMDatabase

Tôi đã thêm các file theese:

FMDatabaseQueue 
FMDatabaseAdditions 
FMDatabase 
FMResultSet 
FMDatabasePool 

..và tôi cũng đã thêm các thư viện libsqlite3.dylib và nhập khẩu FMDatabase.h, nhưng ngay sau khi tôi bỏ ghi chú dòng này:

FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"]; 

..Tôi nhận được lỗi này:

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_FMDatabase", referenced from: 
     objc-class-ref in DBWrapper.o 
ld: symbol(s) not found for architecture i386 

Tôi cũng đã thử thay đổi các cài đặt như mục tiêu Triển khai trong khoảng 4.0 - 5.0 và tạo một dự án mới, sạch sẽ, v.v.

Tôi đang sử dụng phiên bản Xcode 4.3 (4E109).

Tôi đang làm gì sai? :)

// Stefan

+1

Bạn đã thêm tệp .h và .m vào dự án của mình chưa? – lawicko

+1

Có, tôi đã thêm tất cả các tệp từ src ngoại trừ fmdb.m. –

Trả lời

16

Đó là một mối liên kết lỗi ý nghĩa, mọi thứ bạn ăn các trình biên dịch là tốt nhưng một khi nó đến thời gian để đóng gói tất cả các mã đối tượng biên soạn lại với nhau thành một file thực thi nó không thể tìm thấy việc thực hiện cho một lớp học mà được tham chiếu trong mã.

Kéo tệp .m vào danh sách nguồn dự án trong Xcode sẽ tự động thêm chúng vào "giai đoạn xây dựng", nhưng nếu bạn đã làm điều đó và bạn gặp lỗi này, hãy kiểm tra xem chúng có ở đó không: Nhấp vào đầu mặt hàng cấp trong danh sách nguồn bên trái để nhận cài đặt dự án, nhấp vào mục tiêu trong ngăn tiếp theo, nhấp vào tiêu đề cột "Xây dựng giai đoạn" trong ngăn tiếp theo, sau đó mở rộng hàng "Nguồn biên dịch". Nếu các tệp FM không có trong đó, hãy nhấp vào nút + ở cuối danh sách và chọn chúng.

+0

Bạn đã đúng, điều này đã giải quyết được vấn đề của tôi. Cảm ơn! –

+3

Đây là lỗi trong Xcode 4.3 btw khiến hộp kiểm "Thêm vào mục tiêu" không được chọn khi thêm tệp. – valexa

+0

Tiếp tục rockin ', Xcode .. Cảm ơn bạn đã lưu ý - Tôi chắc chắn sẽ theo dõi các tệp thả ra khỏi giai đoạn xây dựng. – davehayden

1

Bạn đã nhập tiêu đề FMDB vào nơi bạn đang sử dụng chúng chưa?

#import "FMDatabase.h" 
+0

Có. Tôi có thể định nghĩa biến cơ sở dữ liệu của tôi như thế này: FMDatabase * db; Và nó hoạt động. Nó bị treo ngay sau khi tôi bỏ ghi chú [Cơ sở dữ liệu FMDatabaseWithPath: @ "/ tmp/tmp.db"] ;. –

2

Mở rộng về câu trả lời của davehayden ...

Nếu bạn thêm một thư mục tiêu đề và nguồn file vào Xcode, các file .m không được thêm vào danh sách Compile Nguồn. Tôi thường bị bắt ở đây vì tôi muốn giữ lại một cấu trúc thư mục hợp lý trong thư mục dự án của mình. Để giải quyết vấn đề này, tôi tự sao chép các tệp vào thư mục dự án của mình nơi tôi muốn chúng. Sau đó, trong Xcode, thêm từng tiêu đề và tệp nguồn riêng lẻ vào dự án của tôi mà không cần sao chép (sử dụng Tệp> Thêm tệp vào ...). Chọn tất cả các tệp lỏng trong Project Navigator, nhấp chuột phải và tạo thư mục từ vùng chọn.

Hơi muộn một chút, nhưng tôi hy vọng điều này sẽ giúp người khác.

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