簡體   English   中英

不兼容的指針類型分配

[英]Incompatible pointer type assigning

我有一個靜態字典已經初始化,數據已經添加到另一個.m文件中,現在在我的視圖控制器中我需要靜態字典。 字典實際上包含運營商名稱作為密鑰和它們各自的數字作為值,所以我想要做的是檢查手機屬於哪個運營商然后獲得相應的號碼。 已經形成靜態字典的.m文件是Config.m,它有一個實際返回靜態字典的方法。

+ (NSDictionary*) getMccMncToCodeDictionary
{
    return mccMncLISDictionary;
} 

我在ViewController中所做的是:“指向不兼容的指針類型

Config* network_number = [[Config alloc] init];
network_number = [Config getMccMncToLISCodeDictionary];
NSLog(@"network number:::%@", network_number);

在我的控制台中顯示

network number:::(null)

我得到的警告(黃色錯誤)是在ViewController的代碼的第二行中“從NSDictionary *'分配給'Config * _strong'的不兼容的指針類型”

我的initLISDictionary代碼:

- (void) initLISDictionary
{ 
NSString* MCC = @"520";
NSString* CAT3G = [NSString stringWithFormat:@"%@00",MCC];
NSString* AIS = [NSString stringWithFormat:@"%@01",MCC];
NSString* CAT_CDMA =[NSString stringWithFormat:@"%@02",MCC];
NSString* TOT3G = [NSString stringWithFormat:@"%@15",MCC];
NSString* DTAC = [NSString stringWithFormat:@"%@18",MCC];
NSString* AIS_GSM_1800 = [NSString stringWithFormat:@"%@23",MCC];
NSString* TRUE_MOVE_H = [NSString stringWithFormat:@"%@88",MCC];
NSString* TRUE_MOVE = [NSString stringWithFormat:@"%@99",MCC];

mccMncLISCodeDictionary = [NSMutableDictionary dictionary];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:2] forKey:CAT3G];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:1] forKey:AIS];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:2] forKey:CAT_CDMA];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:4] forKey:TOT3G];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:3] forKey:DTAC];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:1] forKey:AIS_GSM_1800];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:5] forKey:TRUE_MOVE];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:5] forKey:TRUE_MOVE_H];
}

當然這不會奏效。

Config* network_number = [[Config alloc] init];
network_number = [Config getMccMncToLISCodeDictionary];
NSLog(@"network number:::%@", network_number);

此代碼啟動一個新的Config對象,但是當您調用network_number時,您正在調用CLASS方法,因此它之前沒有任何值。 你需要使它成為一個實例方法(只需改變 - 的+,並確保它在標題上聲明),這樣你就可以調用:

Config* network_number = [[Config alloc] init];
network_number = [network_number getMccMncToLISCodeDictionary];

或者你必須讓你的課堂方法完全自給自足,但我確定它不是你想要的。

編輯:

+ (NSDictionary*) getMccMncToCodeDictionary
{

NSString* MCC = @"520";
NSString* CAT3G = [NSString stringWithFormat:@"%@00",MCC];
NSString* AIS = [NSString stringWithFormat:@"%@01",MCC];
NSString* CAT_CDMA =[NSString stringWithFormat:@"%@02",MCC];
NSString* TOT3G = [NSString stringWithFormat:@"%@15",MCC];
NSString* DTAC = [NSString stringWithFormat:@"%@18",MCC];
NSString* AIS_GSM_1800 = [NSString stringWithFormat:@"%@23",MCC];
NSString* TRUE_MOVE_H = [NSString stringWithFormat:@"%@88",MCC];
NSString* TRUE_MOVE = [NSString stringWithFormat:@"%@99",MCC];

mccMncLISCodeDictionary = [NSMutableDictionary dictionary];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:2] forKey:CAT3G];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:1] forKey:AIS];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:2] forKey:CAT_CDMA];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:4] forKey:TOT3G];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:3] forKey:DTAC];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:1] forKey:AIS_GSM_1800];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:5] forKey:TRUE_MOVE];
[mccMncLISCodeDictionary setValue:[NSNumber numberWithInt:5] forKey:TRUE_MOVE_H];

return mccMncLISDictionary;
}

這是你最接近你想要做的事情。

只需使用這兩行,忽略init

NSMutableDictionary *network_number = [Config getMccMncToLISCodeDictionary];
NSLog(@"network number:::%@", network_number);

嘗試將initLISDictionary方法initLISDictionary類方法,然后您可以執行以下操作:

+ (NSDictionary*) getMccMncToCodeDictionary
{
    if (mccMncLISDictionary == nil) {
        [Config initLISDictionary];
    }
    return mccMncLISDictionary;
}

但是,您也正在初始化mccMncLISCodeDictionary而不是mccMncLISDictionary ,因此您還需要理順它。

你應該做:

NSDictionary *network_number = [Config getMccMncToLISCodeDictionary];
NSLog(@"network number:::%@", network_number);

因為您正在調用此方法,其返回類型為NSDictionary

+ (NSDictionary*) getMccMncToCodeDictionary
{
    return mccMncLISDictionary;
}

這些都是返回靜態對象的類方法。

你可能想做這樣的事情:

NSDictionary *network_number = [Config getMccMncToLISCodeDictionary];

暫無
暫無

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

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