SORU
24 Kasım 2008, PAZARTESİ


Aptallar için NSİnvocation?

Tam olarak nasıl NSInvocation işe yarıyor mu? İyi bir giriş var mı?

Özellikle sorunları nasıl aşağıdaki kodu anlamakta güçlük çekiyorum (dan3. Mac OS X Sürümü için kakao Programlama) çalışır, ama o zaman da bu kavramlar öğretici örnek bağımsız olarak uygulayabilir. Kod:

- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
    NSLog(@"adding %@ to %@", p, employees);
    // Add inverse of this operation to undo stack
    NSUndoManager *undo = [self undoManager];
    [[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
    if (![undo isUndoing])
        [undo setActionName:@"Insert Person"];

    // Finally, add person to the array
    [employees insertObject:p atIndex:index];
}

- (void)removeObjectFromEmployeesAtIndex:(int)index
{
    Person *p = [employees objectAtIndex:index];
    NSLog(@"removing %@ from %@", p, employees);
    // Add inverse of this operation to undo stack
    NSUndoManager *undo = [self undoManager];
    [[undo prepareWithInvocationTarget:self] insertObject:p
                                       inEmployeesAtIndex:index];
    if (![undo isUndoing])
        [undo setActionName:@"Delete Person"];

    // Finally, remove person from array
    [employees removeObjectAtIndex:index];
}

Yapmak istediği şeyleri alırım. (BTW, employees NSArray özel Person bir sınıftır.)

Bir varlık .NET adam, kabaca paraleldir için N-C ve Kakao kavramları ilişkilendirmek bilmediğiniz için çalışıyorum .NET kavramlar. Bu benzer .NET temsilci kavramı, ama yazılmamış?

Bu değil 0 açık kitap, çok aradığım bir şey tamamlayıcı gerçek Kakao/N-C uzmanlar, yine gol anladığım kadarıyla temel kavram altında basit(-ish) örnek. Gerçekten bağımsız bölüm kadar bilgi ... hayır zorluk yaşıyordum 9, uygulayabilir bunu yapmak için arıyorum. Ama şimdi ...

Şimdiden teşekkürler!

CEVAP
24 Kasım 2008, PAZARTESİ


38* *göre:

NSInvocation Bir, yani bir eylem bir nesne haline getirilir statik Objective-C iletisi oluşturulur.

Ve, birküçükdaha fazla detay:

Mesaj kavramı objective-c felsefe merkezinde yer alır. Bir yöntemini çağırmak için herhangi bir zaman ya da erişim bazı değişken bir nesne, bir mesaj gönderiyorsunuz. NSInvocation zaman içinde farklı bir noktada bir nesne için bir mesaj göndermek, ya da aynı mesajı birçok kez göndermek istediğinizde kullanışlıdır. NSInvocation sağlartarifgöndermek için gidiyoruz mesajı, ve sonraçağırmak(aslında hedef nesne göndermek) daha sonra.

< / ^ hr .

Örneğin, diyelim ki bir dizi için bir dize eklemek istediğiniz söylüyorlar. Normalde şöyle: addObject: mesaj gönder

[myArray addObject:myString];

< / ^ hr .

Şimdi, hadi NSInvocation zaman: başka bir noktada bu mesajı göndermek için kullanmak istediğiniz söyleyin

İlk olarak, NSMutableArrayile kullanım için NSInvocation bir nesne'addObject: s seçici: . hazırlamak istiyorsunuz

NSMethodSignature * mySignature = [NSMutableArray
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

Sonraki, mesaj göndermek için hangi belirtin:

[myInvocation setTarget:myArray];

Bu nesneyi göndermek istediğiniz mesajı belirleyin:

[myInvocation setSelector:@selector(addObject:)];

Ve bu yöntem için herhangi bir bağımsız doldurun:

[myInvocation setArgument:&myString atIndex:2];

Nesne değişkenler işaretçi tarafından kabul edilmelidir unutmayın. Buna dikkat çektiğin için Ryan McCuaig teşekkür ederim Apple's documentation bakın lütfen daha fazla bilgi için.

, myInvocation bu noktada tam bir nesne, gönderilen bir mesaj olarak nitelendiriliyor. Aslında mesaj göndermek için çağrısı:

[myInvocation invoke];

Bu son adım, mesaj, aslında [myArray addObject:myString]; yürütme gönderilecektir.

Bir e-posta göndermek gibi düşünün. Sen aç bir yeni e-posta (NSInvocation nesne), doldurmak adresi kişi (nesne) kim ister göndermek için, yazın bir iletinin alıcı (belirtin selector ve bağımsız değişkenler) ve ardından "gönder" (çağrı invoke).

Daha fazla bilgi için Using NSInvocation bkz.

< / ^ hr .

NSUndoManager o NSInvocation nesneleri kullanırterskomutlar. Aslında, ne yapıyor oluşturma NSInvocation nesne ki: "Hey, eğer sen de istersen Geri Al ne yaptım, bu mesajı göndermek için o nesne ile bu argümanlar". NSUndoManager NSInvocation nesne verin ve geri alınamaz eylemler dizisi için nesne ekler. Eğer kullanıcı"", NSUndoManager sadece dizideki en son eylem arar ve NSInvocation saklı nesne gerekli eylemi gerçekleştirmek için çağırır. Geri çağırırsa

Daha fazla ayrıntı için Registering Undo Operations bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • RocketJump

    RocketJump

    22 ŞUBAT 2006
  • Tahir Jahi

    Tahir Jahi

    6 Mart 2006