2015-03-23 2 views
1

Я не из фона xcode, а из java и C#. Теперь я пытаюсь изменить свое приложение на ios и не уверен, что я понимаю, как правильно нарисовать, или более того, что такое проблема с xcodes!Кастинг с sqlite3

Я пытаюсь сделать что-то очень простое, получить значения из sqlite и заполнить объект NSMutableDictionary.

Я хотел бы получить такие значения, как long, int и string, и, похоже, мне нужно делать все виды кастингов, чтобы заставить компилятор понравиться. Может ли кто-то указать мне в правильном направлении, как то, что я должен писать, так как это обязательно необходимо.

Моя переменная-словарь myDictionary для этого примера.

Добавить строку NSDictionary

[myDictionary setValue:[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 4)] forKey:@"myText"]; 

Добавить ИНТ в NSDictionary

[myDictionary setValue: [[NSNumber alloc] initWithUnsignedInt:sqlite3_column_int(sqlStatement, 0)] forKey:@"myInt" ]; 

ли все это отливка вам необходима? Я думал, что я мог бы сделать простые вещи, как этот

Добавление междунар к NSDictionary

[myDictionary setValue: sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ]; 

Но это изречение

неявное преобразование из 'Int' в 'ид' отвергается с ARC

Также проверено:

[myDictionary setValue: (int *)sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ]; 

Но я получаю

неявного преобразования типа указателя, не Objective-C «Int» в «ид» отвергается с ARC

Я попытался одни и те же вещи с текстом, а также , Кто-то, пожалуйста, сообщите мне, если я не буду делать это правильно.

Даже что-то вроде этого не работает

int *myVar = sqlite3_column_int(sqlStatement, 0); 

И если я изменить его слишком

int myVar = sqlite3_column_int(sqlStatement, 0); 

, который делает работу, то я не могу заполнить его в NSDictionary в этой ошибки

[myDictionary setValue:myVar forKey:@"intValue"]; 

ответ

1

Да, некоторые из них необходимы. Многое из того, что вы смешиваете интерфейс C sqlite с Objective C, и вы должны наблюдать, что такое объект и что является примитивным. Ваш первый пример (строка) в значительной степени похож на него. NSString сильно отличается от char * of C. Аналогично следующему NSNumber.Обратите внимание, однако, вы только делаете один бросок, и это от

const unsigned char * 

в

char * 

NSDictionaries следует хранить только объекты, а не примитивы, так что вам нужно поставить в NSStrings и NSNumbers, а не полукокса * и int.

Вы не хотите подключать указатели к примитивам, например (int *) в NSDictionary, сначала преобразовывать их в объекты, а затем выводить их обратно.

Это может быть полезно для вас, что есть сокращенные процедуры, такие как:

[myMutableDictionary setValue: [NSNumber numberWithInt:2] forKey:@"mykey"]; 

Надеется, что это помогает.

+0

Спасибо, ярлык очень полезен. Гораздо проще, если вы знаете, что эти методы существуют. Pitty один не существует для NSString, хотя ... или есть? – Gillardo

+0

неважно, нашел [NSString stringWithUTF8String: ...]; – Gillardo

+0

Другим удобным вызовом является [NSString stringWithFormat: @ ", например, форматы printf% d% @", an_Integer, an_ObjectiveC_object]; –

Смежные вопросы