簡體   English   中英

無法混淆NSOutputStream的write:MaxLength:

[英]Not able to swizzle NSOutputStream's write:MaxLength:

在實際寫入NSOutputStream之前,我需要編寫自定義數據。

為了執行混亂的代碼,我創建了一個NSOutputStream(SwizzleWrite)類別,其中包含以下內容:

SEL originalSelector = @selector(write:maxLength:);
SEL swizzledSelector = @selector(swizzledWrite:maxLength:);

Method originalMethod = class_getInstanceMethod([NSOutputStream class], originalSelector);
Method swizzledMethod = class_getInstanceMethod([self class], swizzledSelector);

method_exchangeImplementations(originalMethod, swizzledMethod);

然后,我創建Inout&Output流:CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault,hostRef,80,&readStream,&writeStream);

inputStream = (__bridge_transfer NSInputStream *)readStream;
outputStream = (__bridge_transfer NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];

但是現在,當控件到達handleEvent:委托時,特別是: [outputStream write:rawstring maxLength:sizeof(rawstring)]; ,我沒有在swizzledWrite:maxLength上得到它:

我在這里做錯了什么?

PS:我讀過繁雜的Apple方法不適合Appstore使用,但我也讀過一些被接受的案例。

為什么您覺得在這里打噴嚏是最好的選擇? 在我看來,子類會更好。 關於流的子類化,有一些棘手的部分,但請看這里

如果確定要使工作混亂,是否已設置斷點並確保您的混亂選擇器不為零? 如果簽名有誤,可能會發生

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM