Вот что я нашел googling вокруг:
var fileupload = require("express-fileupload");
Который довольно простой механизм для загрузки
app.post("/upload", function(req, res)
{
var file;
if(!req.files)
{
res.send("File was not found");
return;
}
file = req.files.FormFieldName; // here is the field name of the form
file.mv("file.txt", function(err) //Obvious Move function
{
// log your error
});
res.send("File Uploaded");
});
После большого усилия (и тонкая настройка кода от Kevin), я наконец выяснил, как сделать это в контроллере представления, который выталкивается от стека. Проблема, которую я имел, состояла в том, что self.navigationController возвращал ноль после того, как я удалил последний объект из массива контроллеров. Я думаю, что это происходило из-за этой строки в документации для UIViewController на методе экземпляра navigationController, "Только возвращает контроллер навигации, если контроллер представления находится в своем стеке".
я думаю, что, как только контроллер текущего представления удален из стека, его navigationController метод возвратит ноль.
Вот скорректированный код, который работает:
UINavigationController *navController = self.navigationController;
MyEditViewController *mevc = [[MYEditViewController alloc] initWithGizmo: gizmo];
NSMutableArray *controllers = [[self.navigationController.viewControllers mutableCopy] autorelease];
[controllers removeLastObject];
navController.viewControllers = controllers;
[navController pushViewController:mevc animated: YES];
На основе опыта Вы оказываетесь перед необходимостью играть со свойством UINavigationController's viewControllers
непосредственно. Что-то вроде этого должно работать:
MyEditViewController *mevc = [[MYEditViewController alloc] initWithGizmo: gizmo];
[[self retain] autorelease];
NSMutableArray *controllers = [[self.navigationController.viewControllers mutableCopy] autorelease];
[controllers removeLastObject];
self.navigationController.viewControllers = controllers;
[self.navigationController pushViewController:mevc animated: YES];
Примечание: Я изменил сохранение/выпущение на сохранение/автовыпущение, поскольку это просто обычно более устойчиво - если исключение произойдет между сохранением/выпущением, то Вы просочитесь сам, но автовыпуск заботится об этом.
Этот UINavigationController
метод экземпляра мог бы работать...
контроллеры представления Pops, пока указанный контроллер представления не является контроллером вида сверху и затем обновляет дисплей.
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
Я обнаружил, что вам вообще не нужно вручную вмешиваться в свойство viewControllers
. По сути, здесь есть две хитрости:
self.navigationController
вернет nil
, если self
в данный момент отсутствует в стеке контроллера навигации. Поэтому сохраните его в локальной переменной, прежде чем терять к нему доступ. сохранить
(и правильно освободить
) self
или объект, которому принадлежит Метод, которым вы находитесь, будет освобожден, что вызовет странность. После того, как вы выполните эту подготовку, просто хлопайте и нажимайте как обычно. Этот код мгновенно заменит верхний контроллер другим.
// locally store the navigation controller since
// self.navigationController will be nil once we are popped
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it's popped off
[[self retain] autorelease];
// Pop this controller and replace with another
[navController popViewControllerAnimated:NO];
[navController pushViewController:someViewController animated:NO];
Если в этой последней строке вы измените анимированный
на YES
, тогда новый экран будет фактически анимирован, а контроллер, который вы только что открыли, анимируется. Выглядит неплохо!
Спасибо, это именно то, что мне было нужно. Я также поместил это в анимацию, чтобы получить страницу curl:
MyEditViewController *mevc = [[MYEditViewController alloc] initWithGizmo: gizmo];
UINavigationController *navController = self.navigationController;
[[self retain] autorelease];
[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration: 0.7];
[UIView setAnimationTransition:<#UIViewAnimationTransitionCurlDown#> forView:navController.view cache:NO];
[navController popViewControllerAnimated:NO];
[navController pushViewController:mevc animated:NO];
[UIView commitAnimations];
0.6 продолжительность быстро, хорошо для 3GS и новее, 0.8 все еще немного слишком быстро для 3G...
Johan