2012-03-12 5 views
5

Tôi đang cố gắng tạo một ứng dụng iOS 5 với một số chức năng FTP rất cơ bản và cần một số hướng dẫn. Nó sẽ kết nối với một thiết bị trên mạng cục bộ và thực hiện các hành động đọc/ghi với các tệp .dat/txt. Tôi đã thực hiện một số tìm kiếm trong vài ngày qua và đã thấy các đề xuất khác nhau nhưng không có gì đơn giản, đủ để tôi có thể chọn và sửa đổi nhanh chóng cho mục đích sử dụng cá nhân của mình.Thiết lập FTP cơ bản trên iOS; Đọc và Viết Luồng

Câu hỏi của tôi là những:

  1. Có bất kỳ hướng dẫn/mẫu mã mà bạn có thể giới thiệu cho tôi?
  2. Tôi nên làm việc với các hoạt động đọc/ghi cơ bản nào?

Cuối cùng, tôi nên đề cập rằng tôi đã dành một lượng thời gian đáng kể để phân tích SimpleFTPSample từ Apple nhưng mã mẫu cho thông báo "Lỗi kết nối" và "Lỗi mở luồng" cho từng ví dụ, vì vậy tôi ' m một chút cảnh giác về tính hữu ích của nó.

Hãy tha thứ cho tôi nếu điều này đã được trả lời ở nơi khác. Tất cả các bài viết liên quan đều có phần câu trả lời tôi cần, nhưng không phải toàn bộ câu hỏi. Cảm ơn bạn trước!

CHỈNH SỬA cho rõ ràng: Một ví dụ được xác định rõ hoặc hướng dẫn từng bước là những gì tôi thực sự muốn. Các tìm kiếm trên Google của riêng tôi đã không hiển thị và tôi đang rất cần một số hướng dẫn tại đây.

CẬP NHẬT: Tôi đã đăng câu hỏi này từ lâu nhưng vẫn tiếp tục sử dụng FTPHelper được đề cập trong câu trả lời được chấp nhận. Gần đây tôi đã quét sạch bụi khỏi dự án cũ và nhận ra có một rò rỉ bộ nhớ nhỏ trong chức năng tìm nạp của FTPHelper có thể là một ứng dụng sát thủ nếu được gọi liên tục. Nếu anybdy tình cờ gặp câu hỏi này và chọn sử dụng FTPHelper, hãy chắc chắn thêm dòng CFRelease được nhìn thấy trong đoạn mã dưới đây.

- (void) fetch: (NSString *) anItem 
{ 
    if (!self.uname || !self.pword) COMPLAIN_AND_BAIL(@"Please set user name and password first"); 
    if (!self.urlString) COMPLAIN_AND_BAIL(@"Please set URL string first"); 

    NSString *ftpRequest = [NSString stringWithFormat:@"%@/%@", self.urlString, [anItem stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
/* CFShow(ftpRequest); */ 
    NSString *writepath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
    self.filePath = [writepath stringByAppendingPathComponent:anItem]; 
    CFURLRef writeURL = CFURLCreateFromFileSystemRepresentation (NULL, (const UInt8 *) [writepath UTF8String], [writepath length], NO); 
    MySimpleDownload((CFStringRef)ftpRequest, writeURL, (CFStringRef) self.uname, (CFStringRef)self.pword); 
    CFRelease(writeURL);//ADD THIS LINE TO FIX MEMORY LEAK 
} 
+0

bạn có thể gửi mã nguồn mã về cách triển khai ftp để tải xuống tệp mà không cần Internet không –

Trả lời

7

Ứng dụng SimpleFTPSample đang chạy hoàn hảo, có lẽ đó là một vấn đề mà bạn không thể nhìn thấy. Những gì tôi có thể đề nghị bạn (trừ ví dụ của Apple) là để kiểm tra ví dụ THIS có chứa một lớp trợ giúp cho tất cả các hoạt động FTP cơ bản. Một điều cần lưu ý là iOS 5 ARC. Cả hai ví dụ của Apple và một ví dụ tôi liên kết là dành cho các phiên bản iOS cũ hơn. Có 2 cách cơ bản để sử dụng chúng trong iOS 5 - bằng cách yêu cầu trình biên dịch không sử dụng ARC bằng cách thêm cờ -fno-objc-arc trong [Dự án của bạn] -> MỤC TIÊU -> [Ứng dụng của bạn] -> Giai đoạn xây dựng -> Biên dịch nguồn -> [Tệp của bạn] hoặc bằng cách sử dụng công cụ tích hợp trong Xcode để chuyển đổi sang ARC.

Cá nhân tôi chỉ thử nghiệm phương pháp đầu tiên và nó hoạt động đối với tôi.

Nếu điều này không giúp bạn tôi có thể viết một ví dụ, nhưng tiếc là hôm nay tôi rất bận.

CẬP NHẬT:

Cơ chế cơ bản là sử dụng [FTPHelper list:THE_FTP_URL] vào danh sách các nội dung của một thư mục, sau đó tạo ra một danh sách với nội dung và tùy thuộc vào loại (tập tin hoặc thư mục) tải về sử dụng [FTPHelper download: THE_FTP_URL_WITH_THE_FILENAME_FROM_LISTING]. Từ đây, bạn phải triển khai

- (void) downloadFinished 
{ 
    //do the reading depending on the file type 
    NSData *data = [NSData dataWithContentsOfFile:[FTPHelper sharedInstance].filePath]; 
} 

Việc tải lên cũng đạt được một cách tương tự - sử dụng [FTPHelper upload:FILE_TO_UPLOAD] với tệp từ hệ thống tệp.

+0

Hmm, tôi tự hỏi tôi đang làm gì sai với SimpleFTP. Bất kể, cảm ơn bạn cho ví dụ khác. Tôi đang lo lắng xung quanh với nó ngay bây giờ và nó đã cho kết quả (một sự thay đổi tốt đẹp của tốc độ!). Giả sử bạn đã quen thuộc với lớp FTPHelper, bạn khuyên bạn nên tải xuống foo.txt như thế nào và đọc nội dung của nó? Hoặc cách viết nội dung cho foo2.txt và tải lên? – Squatch

+0

Tôi đã chỉnh sửa câu trả lời của mình, bạn có thể kiểm tra nó. Nếu một cái gì đó không rõ ràng, hãy hỏi. – o15a3d4l11s2

+0

Tuyệt vời. Thật là nhẹ nhõm khi cuối cùng cũng có một cái gì đó để làm việc cùng. Cảm ơn bạn! – Squatch

4

Có nhiều thư viện mà bạn có thể sử dụng và chúng hoạt động rất tốt. :)

Ví dụ:

http://www.chilkatsoft.com/ftp-objc.asp

http://code.google.com/p/ios-ftp-server/

tôi khuyên bạn nên sử dụng chúng, bởi vì mã hóa từng cái mình sẽ mất rất nhiều thời gian :) Một điều cần nhớ, như o15a3d4l11s2 nói , là nhận thức được ARC. Nếu bạn sử dụng nó, đừng quên thêm cờ xây dựng vào thư viện không phải là ARC.

+0

Cảm ơn bạn về các thư viện thay thế. Tôi nghĩ rằng tôi có thể gắn bó với FTPHelper nhưng những điều này có xu hướng yêu cầu kế hoạch sao lưu vì vậy đây là những điều tuyệt vời để có. – Squatch

+0

Tôi cần tạo một ứng dụng hỗ trợ tải lên các video lớn hơn ngay cả khi ứng dụng ở chế độ nền tôi có thể sử dụng \t Có nhiều thư viện mà bạn có thể sử dụng và chúng hoạt động tốt. :) Ví dụ: http://www.chilkatsoft.com/ftp-objc.asp ?? –