Objective C error:从不兼容的指针类型传递'setStringValue:'的参数1

obj*_*001 0 xcode system objective-c

好的,这是导致错误的代码的一部分:

    char charlieReturn[10000];
charlieReturn[10000] = system("osascript /applications/jarvis/scripts/getTextCharlieResponce.scpt");


 self.charlieOutput.stringValue = charlieReturn;
Run Code Online (Sandbox Code Playgroud)

getTextCharlieResponce.scpt返回类似这样的内容:"嗨,我的名字是查理",有时可能会比这更长.该脚本返回纯文本.我需要快速帮助!

提前致谢!:d

以利亚

Yuj*_*uji 6

不幸的是,您的代码中存在许多问题.

  1. C函数不会返回脚本的标准输出.system char*

  2. 即使使用返回的函数char*,也不能char像以前那样将其分配给数组:

     char* str="aeiou";
     char foo[100];
     foo[100]=str;   /* doesn't work */
     foo=str;   /* doesn't work either */
    
    Run Code Online (Sandbox Code Playgroud)
  3. Cocoa的字符串类,NSString*不是C字符串char*,尽管您可以轻松地在两者之间进行转换:

     NSString* str=[NSString stringWithUTF8String:"aeiou"];
    
    Run Code Online (Sandbox Code Playgroud)

如果您想要调用Apple脚本中的字符串,则需要执行以下操作:

  1. 准备一个 NSAppleScript:

    NSDictionary* errorDict;
    NSAppleScript* script=[[NSAppleScript alloc] 
                            initWithContentsOfURL:[NSURL fileURLWithPath:@"path/to/script" ]
                                            error:&errorDict];
    
    Run Code Online (Sandbox Code Playgroud)
  2. 执行并获得回复:

    NSAppleEventDescriptor* desc=[script executeAndReturnError:&errorDict];
    NSString* result=[desc stringValue];
    
    Run Code Online (Sandbox Code Playgroud)
  3. 发布脚本:

    [script release];
    
    Run Code Online (Sandbox Code Playgroud)

学习C和Objective-C,玩得开心!