Ошибка цели C: передача аргумента 1 из setStringValue: из несовместимого типа указателя - PullRequest
0 голосов
/ 02 июля 2010

Хорошо, вот часть кода, которая вызывает ошибку:

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


 self.charlieOutput.stringValue = charlieReturn;

getTextCharlieResponce.scpt возвращает что-то вроде этого: «Привет, меня зовут Чарли», и, возможно, иногда это будет длиннее,Сценарий возвращает его в виде простого текста.Мне нужна помощь БЫСТРО!

Заранее спасибо!: D

Илия

Ответы [ 2 ]

6 голосов
/ 03 июля 2010

К сожалению, в вашем коде много проблем.

  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 */
    
  3. Класс строки какао, NSString*, не является строкой C char*, хотя вы можете легко конвертировать между ними:

     NSString* str=[NSString stringWithUTF8String:"aeiou"];
    

Если вы хотите получить строку из вызова скрипта Apple, вам нужно сделать следующее:

  1. Подготовить NSAppleScript:

    NSDictionary* errorDict;
    NSAppleScript* script=[[NSAppleScript alloc] 
                            initWithContentsOfURL:[NSURL fileURLWithPath:@"path/to/script" ]
                                            error:&errorDict];
    
  2. Выполните и получите ответ:

    NSAppleEventDescriptor* desc=[script executeAndReturnError:&errorDict];
    NSString* result=[desc stringValue];
    
  3. Выпустите скрипт:

    [script release];
    

Учитесь C & Objective-C и получайте удовольствие!

0 голосов
/ 03 июля 2010

Вы пытаетесь присвоить массив символов тому, что предположительно является строкой NSString. Попробуйте вместо этого:

self.charlieOutput.stringValue = [NSString stringWithUTF8String:charlieReturn];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...