小编Eri*_*ujo的帖子

使用objective-c传递和访问结构

我想知道如何将结构传递给另一个函数,然后在被调用函数中访问该结构.我正在为iPhone开发,我使用结构的原因是我最终可以将数据作为结构传递给用C构建的服务器.

这是结构:

struct userInfo{
    NSString *firstName;
    NSString *lastName;
    NSString *username;
    NSString *email;
    NSString *ipAddress;
    double latitude;
    double longitude;
};
Run Code Online (Sandbox Code Playgroud)

在这里,我只是提取一些用户输入的数据以及一些CoreLocation数据和iPhone的IP地址:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

函数处理结构:

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

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

编译器抛出此错误:request for member 'firstName' in something not a structure or union.当我尝试在第二个函数中访问它时,该结构是否超出范围?

c iphone struct objective-c argument-passing

5
推荐指数
1
解决办法
9779
查看次数

UIAlertView无法显示并导致"EXC_BAD_ACCESS"错误

按下键盘上的返回按钮时调用方法.在调用另一个返回整数的方法之后,将根据该整数创建一条消息.然后将消息传递到UIAlterView并显示给用户.警报没有任何选项(因此我没有给代表打电话),而只是通知用户发生了什么.

编辑:下面是完整的方法(以前显示的部分).当我在之前注释掉所有内容UIAlertView并替换字符串@"test"而不是传递消息时,警报会成功显示.我的结构没有正确处理内存吗?

- (IBAction)joinButton {
    struct userInfo localUser;

    [emailAddress resignFirstResponder];

    //convert textField text to char array in structure
    localUser.firstName = [self convertStringtoCharArray:firstName.text];
    localUser.lastName = [self convertStringtoCharArray:lastName.text];
    localUser.username = [self convertStringtoCharArray:username.text];
    localUser.email = [self convertStringtoCharArray:emailAddress.text];
    localUser.ipAddress = [self convertStringtoCharArray:localIPAddress.text];
    localUser.latitude = currentLocation.coordinate.latitude;
    localUser.longitude = currentLocation.coordinate.longitude;

    //pass structure to be sent over socket
    int result = [myNetworkConnection registerWithServer:&localUser];

    NSString *message = nil;

    //process result of sending attempt
    if (result == 0) {
        //registration succesful
        message = [NSString stringWithString:@"Registration successful"]; …
Run Code Online (Sandbox Code Playgroud)

iphone memory-management exc-bad-access uialertview

3
推荐指数
1
解决办法
6071
查看次数

比较C - strcmp中的字符串

我在比较C中的字符串时遇到了麻烦(我很擅长).我在此服务器应用程序上有套接字等待接受来自客户端的数据.在我的程序的这个特定部分,我希望能够根据从客户端收到的数据执行MySQL查询.我希望能够知道接收到的数据何时具有"newuser"的值以启动简单的注册过程.Strcmp返回正值1,我相信我应该得到0,因为值应该相等.

源代码:

//setup socket
//loop and select structure to handle multiple connections

if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
// got error or connection closed by client
    if (nbytes == 0) {
        // connection closed
        printf("selectserver: socket %d hung up\n", i);
    } else {
        perror("recv");
    }
    close(i); // bye!
    FD_CLR(i, &master); // remove from master set
} else {

    char check[] = "newuser";
    char fromUser[sizeof check];

    strncpy(fromUser,buf, sizeof check);
    printf("length of fromUser: %d\n", sizeof fromUser);
    printf("length …
Run Code Online (Sandbox Code Playgroud)

c sockets string network-programming strcmp

0
推荐指数
1
解决办法
5174
查看次数