Pracuję nad aplikacją na iPhone'a, która polega na przesyłaniu pełnych zdjęć z aparatu (zazwyczaj od 1,5 do 2,0 MB każdy), jak również ich miniatur (znacznie mniejsze) do Amazon S3.Błąd POSIX 12 ("Nie można przydzielić pamięci") podczas przesyłania plików z iPhone'a
Miniatury zawsze poprawnie się ładują, ale czasami pełne obrazy nie, a gdy się nie powiedzie, nie działają z kodem błędu POSIX 12, inaczej ENOMEM. Jednak dodałem kod debugowania, aby wydrukować ilość wolnej pamięci, gdy wystąpi błąd, i zawsze jest trochę za darmo, zwykle ponad 100 MB.
Co więcej, błąd pojawia się częściej, gdy przesyłanie odbywa się przez 3G i mniej, gdy jest za dużo Wi-Fi - co wydaje się dziwne, ponieważ żądanie nie pobiera dużo, a plik, który jest przesyłany, jest już w pamięci (I Próbowałem również przesyłać strumieniowo z dysku bez poprawy.
Próbowałem przesłać plik przy użyciu NSURLConnection, funkcji Foundation CFHTTP * i biblioteki ASIHTTPRequest, ale niezależnie od tego błąd występuje z tą samą częstotliwością. Jeszcze dziwniejsze jest to, że wszyscy moi Googlingi ujawnili, że użytkownicy końcowi czasami otrzymują kod błędu 12 z Safari - nie widziałem żadnego programisty iOS, który o tym wspomniał. Pracuję z odziedziczoną bazą kodu, więc jest możliwe, że coś jest z nią nie tak, ale nie jestem nawet pewien, czego szukać. Każdy wgląd byłby bardzo doceniony!
jakie połączenie powraca ENOMEM? –
Kiedy korzystałem z NSURLConnection, otrzymywałbym błąd jako część metody delegowania didFailWithError - NSError z domeną błędu POSIX, kod błędu 12 i zlokalizowany opis "Can not allocate memory". Kiedy użyłem CFHTTPMessageRef, nie zadziałałoby to podczas wywoływania CFReadStreamRead() (funkcja zwrócona -1), a potem errno byłaby równa 12. –
Widzę ten sam problem podczas próby przesłania plików za pomocą interfejsu Google Docs API w 3G. W poście na temat Dropbox API wspomniano o podobnym problemie: http://forums.dropbox.com/topic.php?id=25351. Wydaje się, że dzieje się to przy wolnych połączeniach (3G) z dużymi plikami. – Kamchatka