Если вы хотите переместить анимацию прокрутки в таблицу, используйте этот код. Прокрутка переместится наверх с анимацией за 0,5 секунды.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[_tableContent scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
[UIView commitAnimations];
Java - объектно-ориентированный язык, и весь смысл ORM заключается в том, чтобы скрыть от вас детали таблиц соединения и тому подобное. Следовательно, даже рассмотрение удаления из объединенной таблицы без учета последствий было бы странным.
Нет, вы не можете сделать это с JPQL, то есть для сущностей.
Извлеките сущности на обоих концах и очистите их коллекции. Это удалит записи объединяемых таблиц. Объектно-ориентированный.
но определение нового набора в дочернем классе удалит родительские атрибуты Если вы хотите создать решение с абсолютно минимальными накладными расходами на производительность, было бы не так сложно провести рефакторинг большая часть функциональных возможностей в строку, которая может быть eval
ed, когда определен инициализатор. Я не тестировал, какая будет разница.
Примечание: я обнаружил, что взлом new
работает лучше, чем взлом initialize
. Если вы определите инициализировать
с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with
в качестве замещающего инициализатора, и невозможно использовать super
] в блоке.
eval
ed, когда определен инициализатор. Я не тестировал, в чем будет разница.
Примечание: я обнаружил, что взлом new
работает лучше, чем взлом initialize
. Если вы определите initialize
с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with
в качестве замещающего инициализатора, и невозможно использовать super
] в блоке.
eval
ed, когда определен инициализатор. Я не тестировал, в чем будет разница.
Примечание: я обнаружил, что взлом new
работает лучше, чем взлом initialize
. Если вы определите initialize
с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with
в качестве замещающего инициализатора, и невозможно использовать super
] в блоке.
Это первое решение, которое приходит мне в голову. В моем модуле есть один большой недостаток: вы должны определить метод инициализации класса перед включением модуля, иначе он не будет работать.
Возможно, есть лучшее решение этой проблемы, но это то, что я написал менее чем за пару секунд. минут.
Кроме того, я не уделял слишком много внимания выступлениям. Вы, наверное, найдете гораздо лучшее решение, чем я, особенно если говорить о выступлениях. ;)
#!/usr/bin/env ruby -wKU
require 'rubygems'
require 'activesupport'
module Initializable
def self.included(base)
base.class_eval do
extend ClassMethods
include InstanceMethods
alias_method_chain :initialize, :attributes
class_inheritable_array :attr_initializable
end
end
module ClassMethods
def attr_initialized(*attrs)
attrs.flatten.each do |attr|
attr_accessor attr
end
self.attr_initializable = attrs.flatten
end
end
module InstanceMethods
def initialize_with_attributes(*args)
values = args.dup
self.attr_initializable.each do |attr|
self.send(:"#{attr}=", values.shift)
end
initialize_without_attributes(values)
end
end
end
class MyClass1
attr_accessor :foo, :bar
def initialize(foo, bar)
@foo, @bar = foo, bar
end
end
class MyClass2
def initialize(*args)
end
include Initializable
attr_initialized :foo, :bar
end
if $0 == __FILE__
require 'test/unit'
class InitializableTest < Test::Unit::TestCase
def test_equality
assert_equal MyClass1.new("foo1", "bar1").foo, MyClass2.new("foo1", "bar1").foo
assert_equal MyClass1.new("foo1", "bar1").bar, MyClass2.new("foo1", "bar1").bar
end
end
end
Этот модуль позволяет использовать хэш attrs в качестве опции для new (). Вы можете включить модуль в класс с наследованием, и конструктор по-прежнему работает.
Мне это нравится больше, чем список значений attr в качестве параметров, потому что, особенно с унаследованными атрибутами, я не хотел бы пытаться вспомнить, какой параметр был какой.
module Attrize
def initialize(*args)
arg = args.select{|a| a.is_a?(Hash) && a[:attrs]}
if arg
arg[0][:attrs].each do |key, value|
self.class.class_eval{attr_accessor(key)} unless respond_to?(key)
send(key.to_s + '=', value)
end
args.delete(arg[0])
end
(args == []) ? super : super(*args)
end
end
class Hue
def initialize(transparent)
puts "I'm transparent" if transparent
end
end
class Color < Hue
include Attrize
def initialize(color, *args)
p color
super(*args)
p "My style is " + @style if @style
end
end
И вы можете сделать это:
irb(main):001:0> require 'attrize'
=> true
irb(main):002:0> c = Color.new("blue", false)
"blue"
=> #<Color:0x201df4>
irb(main):003:0> c = Color.new("blue", true, :attrs => {:style => 'electric'})
"blue"
I'm transparent
"My style is electric"