0

すべてのカテゴリ ファイルとヘッダー インクルードを新しい Xcode プロジェクトにコピーし、DataViewControler にあったコードのセクションをタブのビュー コントローラー (SecondViewController) の 1 つに貼り付けました。どちらも viewDidLoad() セクション内にあります。

コピーして貼り付けたコードのスニペットを次に示します。

SecondViewController.m

#import "SystemStatusReportSecondViewController.h"
#import "memAndProcesses1.h"
#include <stddef.h>
#import "NSObject+BatteryStats.h"
#import "NSObject+DeviceInfo.h"
#import "IPAddress.h"

@interface SystemStatusReportSecondViewController ()

@end

@implementation SystemStatusReportSecondViewController
@synthesize batteryTextView;

- (void)viewDidLoad
{
    [super viewDidLoad];

NSObject *myObject = [[NSObject alloc] init];
[myObject autorelease];
UIDevice *device = [UIDevice currentDevice];

//...

NSString *batteryStatus = [myObject simpleBatteryStatus];

}

BatteryStats.m

#import "NSObject+BatteryStats.h"

 @implementation NSObject (BatteryStats) 

- (float)batteryLevel {
    UIDevice *myDevice = [UIDevice currentDevice];
    [myDevice setBatteryMonitoringEnabled:YES];
    float batteryLevel = [myDevice batteryLevel]; 

    return batteryLevel;
}

- (NSString*)simpleBatteryStatus {

    NSArray *batteryStatus = [NSArray arrayWithObjects: 
                              @"Battery status is unknown.", 
                              @"Battery is in use (discharging).", 
                              @"Battery is charging.", 
                              @"Battery is fully charged.", nil];
    int batteryState = [[UIDevice currentDevice] batteryState];
    NSString *batteryChargeStr = [batteryStatus objectAtIndex:batteryState];


    return batteryChargeStr;
}

@終わり

myObject でカテゴリ関数を呼び出そうとすると、そのコードを含むページでアプリがクラッシュします (この場合は、バッテリー情報のタブに切り替えると)。

それ以外の場合、警告やエラーはなく、クラッシュするだけです。

以下はログです。誰かが前にこのようなことを経験したことがありますか? プロセスの早い段階でオリジナルの設定を更新した可能性があります。

2012-06-28 13:31:53.965 SystemStatusReport[8269:f803] -[NSObject simpleBatteryStatus]: unrecognized selector sent to instance 0x6840440
2012-06-28 13:31:54.025 SystemStatusReport[8269:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSObject simpleBatteryStatus]: unrecognized selector sent to instance 0x6840440'
*** First throw call stack:
(0x13c8022 0x1559cd6 0x13c9cbd 0x132eed0 0x132ecb2 0x301b 0xd9a1e 0xf50a9 0xf4edd 0xf34aa 0xf334f 0xf4e14 0x13c9e99 0x1514e 0x150e6 0x23d4bd 0x13c9e99 0x1514e 0x150e6 0xbbade 0xbbfa7 0xbbb13 0x23fc48 0x13c9e99 0x1514e 0x150e6 0xbbade 0xbbfa7 0xbb266 0x3a3c0 0x3a5e6 0x20dc4 0x14634 0x12b2ef5 0x139c195 0x1300ff2 0x12ff8da 0x12fed84 0x12fec9b 0x12b17d8 0x12b188a 0x12626 0x2a12 0x2985 0x1)
terminate called throwing an exception(lldb) 
4

1 に答える 1

0

2つの可能性があります:

  1. あなたは#include BatteryStats.hあなたのSecondViewController.m、またはにいませんでした
  2. カテゴリにメソッドがありません-simpleBatteryStatus。投稿したコードにはメソッドが1つだけあります。-batteryLevel

ヒント:カテゴリを自動的にロードする場合は、ターゲットに-ObjCフラグを追加します                             ([ターゲット]>[ビルド設定]>[その他のリンカーフラグ]で)

-ObjCObjective-Cクラスまたはカテゴリを実装する静的アーカイブライブラリのすべてのメンバーをロードします。

于 2012-06-28T17:58:28.280 に答える