2009-06-30 37 views
5

Tôi muốn biết cách truyền các cấu trúc cho một hàm khác và sau đó truy cập cấu trúc đó trong hàm được gọi. Tôi đang phát triển cho iPhone và lý do tôi đang sử dụng cấu trúc là vì vậy mà tôi cuối cùng có thể truyền dữ liệu như cấu trúc đến một máy chủ được xây dựng trong C.Vượt qua và truy cập các cấu trúc bằng cách sử dụng mục tiêu-c

Dưới đây là cấu trúc:

struct userInfo{ 
    NSString *firstName; 
    NSString *lastName; 
    NSString *username; 
    NSString *email; 
    NSString *ipAddress; 
    double latitude; 
    double longitude; 
}; 

Ở đây tôi đang chỉ đơn giản là lấy một số người dùng inputed dữ liệu cùng với một số dữ liệu CoreLocation và của iPhone Địa chỉ IP: xử lý

- (IBAction)joinButton { 
    struct userInfo localUser; 

    localUser.firstName = firstName.text; 
    localUser.lastName = lastName.text; 
    localUser.username = username.text; 
    localUser.email = emailAddress.text; 
    localUser.ipAddress = localIPAddress.text; 
    localUser.latitude = currentLocation.coordinate.latitude; 
    localUser.longitude = currentLocation.coordinate.longitude; 

    [myNetworkConnection registerWithServer:&localUser]; 
} 

hàm struct:

- (void)registerWithServer:(struct userInfo*)myUser { 

    printf("First name is: %s", myUser.firstName);//error when compiling 
} 

người khiếu nại gửi lỗi này: request for member 'firstName' in something not a structure or union. Đó có phải là cấu trúc nằm ngoài phạm vi khi tôi cố gắng truy cập nó trong hàm thứ hai không?

+0

Không có lý do gì để đặt đối tượng Objective-C bên trong các cấu trúc. Đừng làm thế. Hoặc là làm cho một đối tượng để giữ dữ liệu của bạn, đặt nó trong một NSDictionary, hoặc chuyển đổi tất cả mọi thứ sang các loại C bản địa như char * cho cấu trúc của bạn. –

Trả lời

7

Bạn đang chuyển một con trỏ tới cấu trúc. Sử dụng toán tử ->, không phải dấu chấm.

myUser->firstName 
+0

kết quả đầu ra 8a trên bảng điều khiển, không phải là chuỗi được nhập. –

+0

Đó là vì đó là một NSString, không phải là một chuỗi C (char *). Bạn có thể nhận được một chuỗi C với một bản sao nội dung của NSString bằng cách sử dụng các phương thức cStringUsingEncoding :, getCString: maxLength: encoding :, hoặc UTF8String. Cuối cùng có thể là đơn giản nhất: printf ("% s \ n", [myUser-> firstName UTF8String]); – mkb

+0

Để xuất ra một NSString với printf(), bạn phải chuyển nó thành một char * và sử dụng định dạng% s. Tuy nhiên, bạn có thể sử dụng% @ với NSLog hoặc với biến thể của riêng bạn. http://cocoaheads.byu.edu/wiki/a-different-nslog –

2

tôi không thể không nghĩ rằng bạn thực sự cần làm cho điều đó một đối tượng mục tiêu-C thích hợp với bất động sản - làm việc nhiều hơn nhưng sau đó nó sẽ tất cả cư xử tốt hơn và sống trong hệ sinh thái NSObject.

+0

đúng và có thể sẽ xảy ra điều đó. nhưng ngay bây giờ tôi muốn có được thoải mái gửi một cấu trúc từ iPhone đến một máy chủ từ xa. Tôi tưởng tượng rằng trong tương lai đây sẽ là một đối tượng và tôi sẽ sao chép các thuộc tính của nó trong một cấu trúc để đẩy ra. –

+0

Thay vì viết một máy chủ C tùy chỉnh tách cấu trúc nhị phân được xây dựng trên một kiến ​​trúc hoàn toàn khác với mã máy chủ, thay vào đó hãy xem xét xây dựng một dịch vụ web kiểu REST đơn giản, nơi bạn chuyển dữ liệu mới dưới dạng tham số thay thế ... cuộc sống xa, dễ dàng hơn nhiều cho bạn trong thời gian dài. Nếu không, hãy bắt đầu đọc về các vấn đề cuối cùng và cách điều chỉnh cho các kích thước int khác nhau trong cấu trúc ... –

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