Параметр FSMountServerVolumeSync objective c

#objective-c #xcode #xcode4

#objective-c #xcode #xcode4

Вопрос:

Я только начинаю Objective C после того, как побаловал себя Applescript, и, похоже, я не могу заставить FSMountServerVolumeSync работать. Это может показаться вопросом для начинающих, но как передать параметр из переменной в это действие?

Позвольте мне объяснить:
я хочу взять переменную с именем *username и присвоить ей значение username в этом действии. Я также хотел бы сделать это с *url и URL-адресом. Есть ли какой-нибудь способ, которым кто-нибудь мог бы показать мне пример того, как это настроить, с точки зрения абсолютного новичка? В настоящее время я читаю руководства и т.д., Но я хотел бы выполнить этот раздел кода, даже если я не совсем понимаю, что я делаю. 😉
Заранее спасибо!

[править] Вот что у меня получилось на данный момент:

 - (IBAction)signin:(id)sender{

NSString * user = @"myusername";
NSString * password = @"mypassword";
NSURL * url = [NSURL URLWithString: @"smb://123.456.789.0"];
NSURL * mountDir = [NSURL URLWithString: @"/Students"];

OSStatus FSMountServerVolumeSync (
                                  CFURLRef url, 
                                  CFURLRef mountDir, 
                                  CFStringRef user, 
                                  CFStringRef password, 
                                  FSVolumeRefNum *null, 
                                  OptionBits flags);


} 
  

Комментарии:

1. Не совсем понятно, о чем вы спрашиваете. Что вы пробовали и где у вас возникли проблемы?

Ответ №1:

Это вовсе не глупые вопросы.

Помните, что CFStringRef и CFURLRef являются бесплатными соединительными мостами, что означает, что эквивалентами Objective C являются NSString и NSURL. Все, что вам нужно сделать, это выполнить приведение.

 - (IBAction)signin:(id)sender{

    NSString * user = @"myusername";
    NSString * password = @"mypassword";
    NSURL * url = [NSURL URLWithString: @"smb://123.456.789.0"];
    NSURL * mountDir = [NSURL URLWithString: @"/Students"];
    OptionBits flags = 0;
    OSStatus err = FSMountServerVolumeSync (
                                      (CFURLRef) url, 
                                      (CFURLRef) mountDir, 
                                      (CFStringRef) user, 
                                      (CFStringRef) password, 
                                      NULL, 
                                      flags);

    if(err != noErr)
        NSLog( @"some kind of error in FSMountServerVolumeSync - %ld", err );
} 
  

Понимаете, что я пока имею в виду?

Вот некоторая документация Apple по бесплатным соединительным типам.

Комментарии:

1. Когда я использую это, это не выдает никаких ошибок, но я получаю сообщения о неиспользуемых переменных… это нормально, потому что NSString не используется, а CFString используется? Или я сделал что-то не так? Спасибо за быстрый ответ!

2. Зависит от того, откуда поступают предупреждения о «неиспользуемой переменной». Следуйте своему коду, и если есть переменная, которая назначается, но на которую никогда не ссылаются, нет необходимости иметь ее в вашей функции.

3. Я ненавижу продолжать задавать вопросы, но переменными, для которых я получаю это сообщение, являются URL, имя пользователя, пароль и mountDir. Я добавляю их в строку перед запуском OSStatus FSMountServerVolumeSync. Разве они не должны использоваться?

4. Отредактируйте свой первоначальный вопрос, чтобы показать, как вы вызываете код сейчас, и я отредактирую свой ответ, чтобы избавиться от ваших предупреждений.

5. и я обновил свой ответ. Вы объявляли переменные внутри самого вызова FSMountServerVolumeSync. Если вы используете мои изменения, вы будете правильно выполнять кастинг. Я надеюсь, что это поможет!