2

プロジェクトの 1 つに Cocoapods を介して TSMessage を実装しました。TSMessage のクラス メソッドをサブクラス化して、デフォルトのビュー コントローラーを設定しようとしています。TSMessage.m から:

+ (UIViewController *)defaultViewController
{
    NSLog(@"No view controller was set as parameter and TSMessage was not subclassed. If you want to subclass, implement defaultViewController to set the default viewController.");
    return nil;
    // Implement this in subclass
}

私のクラスでは、このメソッドをサブクラス化して、メイン ビュー コントローラーを返そうとしています。以下は、メインの実装ファイル ViewController.m の先頭にあるコードです。

@interface mySubclass : TSMessage
+(UIViewController *)defaultViewController;
@end

@implementation mySubclass
+(UIViewController *)defaultViewController{
    NSLog(@"test");
    ViewController *vc = [[ViewController alloc] init];
    return vc;
}//end method
@end

メソッドがサブクラス化されていないという TSMessage からのメッセージが記録されます。Google を検索しても無駄でした。非常に明白な何かが欠けているような気がします。私はこれに慣れていないので、ご容赦ください:)

4

4 に答える 4

3

古いバージョンの TSMessage を使用しているようです。github のコードを見ると、そのメソッドのソース コードが変更されています。お使いのバージョンでは動作しなかった可能性があります。

+[TSMessage setDefaultViewController:]コードの最新バージョンにアップグレードすることをお勧めします。その後、アプリが起動したらすぐに、アプリ デリゲート オブジェクトからメソッドを呼び出します。

#import "TSMessage.h"

@implementation MyAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [TSMessage setDefaultViewController:self.defaultViewController];
}

@end

注: これは、自身に「defaultViewController」プロパティがあることを前提としています。MainWindow.xib ファイルを使用して、このプロパティを作成/割り当てます。

于 2013-08-22T05:25:47.147 に答える
1

私は TSMessages の開発者で、ちょうどこの質問を見つけました。問題について申し訳ありません

+(UIViewController *)defaultViewController

これは古いバージョンのバグで、次のバージョンに置き換えられました。

+ setDefaultViewController(UIViewController *)defaultViewController

デフォルトのView Controllerを設定するための新しいAPIを指摘してくれた@abhi-beckertに感謝します。

次回は、GitHub ( https://github.com/toursprung/TSMessages/issues?state=open ) で問題を作成 し、Stackoverflow の質問にリンクすることもできます。

于 2013-11-10T11:16:08.540 に答える
1

[TSMessage sharedInstance] ではなく [mySubclass sharedInstance] を最初に呼び出して、静的変数を TSMessage のインスタンスではなくクラス (mySubclass) のインスタンスに初期化する必要があると思います。これにより、後で defaultController メソッドが確実に実行されます。

于 2013-08-28T16:03:14.123 に答える
-1

TSMessage は を呼び出しませんが+[mySubClass defaultViewController]、まだ呼び出しています+[TSMessage defaultViewController]。TSMessage をサブクラス化し、クラス メソッドを書き直しても、サブクラスにのみバインドされているため、新しいクラス メソッドは呼び出されません。

これを修正する最も簡単な方法は、TSMessage にカテゴリを作成し、書き直したクラス メソッドを実装に入れ、ヘッダー ファイルを .pch ファイルに含めることです。これにより、将来 TSMessage の新しいバージョンに更新した場合でも、変更する必要なく、まったく同じように機能します。

次のコードはあなたの問題を解決します。

@interface TSMessage (RewriteDefaultViewController)
@end

@implementation TSMessage (RewriteDefaultViewController)
+ (UIViewController *)defaultViewController
{
    NSLog(@"test");
    ViewController *vc = [[ViewController alloc] init];
    return vc;
}
@end
于 2013-08-23T16:04:07.020 に答える