В cellForRow
вы должны установить cell.delegate = self
, чтобы эта логика начала работать. Недостаточно просто заставить ваш контроллер взаимодействовать с вашим пользовательским протоколом делегирования ячейки. Из вашего поста я предполагаю, что delegate
всегда находится в ячейке nil
, поэтому он не работает.
Поскольку у меня нет достаточного количества представителя для редактирования ответов все же, вот моя версия на основе ответа pisswillis, я нашел драгоценный камень индикатора выполнения, который я также использую в своем примере. Я протестировал это, и это работало хорошо до сих пор, но это могло сделать с некоторой чисткой:
require 'rubygems'
require 'progressbar'
in_name = "src_file.txt"
out_name = "dest_file.txt"
in_file = File.new(in_name, "r")
out_file = File.new(out_name, "w")
in_size = File.size(in_name)
# Edit: float division.
batch_bytes = ( in_size / 100.0 ).ceil
total = 0
p_bar = ProgressBar.new('Copying', 100)
buffer = in_file.sysread(batch_bytes)
while total < in_size do
out_file.syswrite(buffer)
p_bar.inc
total += batch_bytes
if (in_size - total) < batch_bytes
batch_bytes = (in_size - total)
end
buffer = in_file.sysread(batch_bytes)
end
p_bar.finish
Самокрутка с помощью IO.syswrite, IO.sysread.
Во-первых, решите длину индикатора выполнения (в символах).. затем этот псевдо код должен сделать это (НЕ ПРОТЕСТИРОВАННЫЙ):
infile = File.new("source", "r")
outfile = File.new("target", "w")
no_of_bytes = infile.length / PROGRESS_BAR_LENGTH
buffer = infile.sysread(no_of_bytes)
while buffer do
outfile = syswrite(buffer)
update_progress_bar()
buffer = infile.sysread(no_of_bytes)
end
где update_progress_bar () является Вашим методом для постепенного увеличения индикатора выполнения одним символом. Вышеупомянутое не тестируется и вероятно сделает рубиновых пуристов плохо. В особенности EOFException мог бы испортить цикл. Также Вам будет нужен некоторый способ удостовериться, что все байты записаны, если no_of_bytes не является целым числом.
Или Вы могли просто взломать его для использования scp, если это - индикатор выполнения, Вам нравится:
def copy(source, dest)
`scp #{source} localhost:#{dest}`
end
Необходимо будет удостовериться, источника и имен dest правильно оставляют для системного вызова. localhost:
тег заставляет scp скопировать файлы, как он делает между компьютерами, таким образом, он покажет индикатор выполнения.