В Objective-C важно различать объекты и примитивные типы.
Объект всегда сохраняется как указатель, который является местоположением объекта в памяти. Указатель - это просто число. С помощью NSLog
вы можете использовать %p
, чтобы увидеть это значение. Вы также можете отобразить его в отладчике, например: print myObject
. Указатель отображается как шестнадцатеричное число с префиксом 0x
. nil
по существу является нулевым (0x0000
). Когда вы выделяете какой-либо объект, вы получите указатель, который не равен нулю. Когда вы назначаете объект переменной, вы просто копируете адрес памяти, а не дублируете объект. С помощью NSLog
вы можете использовать %@
для печати объекта description
. В отладчике, например: print-object myObject
.
Примитивные типы, такие как NSInteger
, не являются объектами. Вместо того чтобы хранить указатель, обычно вы просто сохраняете значение. Когда вы назначаете переменную NSInteger
, вы делаете копию значения. Вы можете увидеть значение в отладчике с помощью print
. Или вот так: NSLog("%ld", (long)currentRow)
. Когда вы назначаете примитив, вы копируете его значение. Не используйте %@
или print-object
с примитивами - они ожидают объекты.
(я говорю «обычно вы просто сохраняете значение»), потому что вы также можете указывать указатели на примитивные типы. как и вам, но это необязательно.)
[self currentRow]
возвращает 0, точно так же, как вы его установили. (Кроме того, поскольку Objective-C гарантирует инициализацию переменных экземпляра, он вернет 0, даже если вы не не установили его.)
Проблема в том, что вы ожидаете указатель на объект. Как вы исправите свой код, зависит от того, как вы его используете:
print-object currentRow
, измените его на print currentRow
. NSLog("%@", currentRow)
, измените его на NSLog(%"ld", (long)currentRow)
. currentRow
в другом месте, где требуется объект, измените вашу переменную экземпляра и типы свойств на NSNumber *
, тип объекта. Установите его с помощью [self setCurrentRow:[NSNumber numberWithInt:0]]
. В соответствии с сообщением об ошибке пользователь, пытающийся запустить процесс mongod, не имеет доступа для записи в папку / data / db.
Выполните следующую команду, чтобы позволить пользователю записать в папку / data / db
sudo chown -R $USER:$USER /data/db
или создать новую папку с разрешениями текущих пользователей и запустить mongod с параметром --dbpath
[111 ]Попробуйте это. Это может помочь.
sudo chmod 777 /data/db
Если вы столкнулись с этой проблемой, это означает, что вы пытаетесь подключиться к монго без запуска сервера на локальном компьютере, что вызывает эту проблему
Некоторые системы не запускают службу mongo автоматически при запуске машины. Поэтому вам нужно запустить его вручную.
Запустите эту команду, чтобы запускать сервис каждый раз, когда вы запускаете компьютер или когда вы хотите использовать mongo
sudo service mongod start
// or
sudo systemctl start mongod
Выполнить sudo service mongod status
и посмотреть, что он вернет. Если он остановлен, запустите sudo service mongod start
, чтобы запустить mongodb, и попробуйте подключиться к нему.
Если sudo service mongod start
выдает ошибку, то
Создайте файл /lib/systemd/system/mongod.service
со следующим содержимым:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
Если ошибка не исчезла, сообщите об ошибке консоли. В начале мы можем помочь вам лучше.