IOS開發問題索引(九)

全系列文章索引:

IOS開發問題索引(一)

IOS開發問題索引(二)

IOS開發問題索引(三)

IOS開發問題索引(四)

IOS開發問題索引(五)

IOS開發問題索引(六)

IOS開發問題索引(七)

IOS開發問題索引(八)

IOS開發問題索引(九)


1 enum用法

http://blog.csdn.net/lvxiangan/article/details/20939379


2 去除TabBar背景圖片默認加藍效果

UIImage *selectImg = [UIImage imageNamed:@"MySettingIcon"];

//聲明這張圖片用原圖(別渲染),默認有亮藍色渲染

selectImg = [selectImg imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];

[self.mySettingTabBarItem setSelectedImage: selectImg];


在iOS8系統下,UITabbar上的item自定義背景色和圖片問題

http://blog.sina.com.cn/s/blog_64cfe8f00102v0yn.html


3 xcode上version和build

        CFBundleVersion,標識(發佈或未發佈)的內部版本號。這是一個單調增加的字符串,包括一個或多個時期分隔的整數。CFBundleShortVersionString  標識應用程序的發佈版本號。該版本的版本號是三個時期分隔的整數組成的字符串。第一個整數代表重大修改的版本,如實現新的功能或重大變化的修訂。第二個整數表示的修訂,實現較突出的特點。第三個整數代表維護版本。該鍵的值不同於“CFBundleVersion”標識。


4 NSIndexSet使用

1.NSIndexSet是什麼?

NSIndexSet  是個無符號整數集合。集合中的元素不可變的、不可重複。常被用來當作索引使用。就從它字面上理解,就叫做:索引集合。

2.NSIndexSet的一些常用方法。

類方法:

創建一個空的索引集合。

+ (id)indexSet

創建一個索引集合,根據索引值

+ (id)indexSetWithIndex:(NSUInteger)index

創建一個索引集合,根據一個NSRange對象

+ (id)indexSetWithIndexesInRange:(NSRange)indexRange


實例方法:

判斷索引集合中是否包含制定的索引值

- (BOOL)containsIndex:(NSUInteger)index

判斷索引集合是否包含指定的indexSet

- (BOOL)containsIndexes:(NSIndexSet*)indexSet

判斷索引集合是否包含指定的indexRange

- (BOOL)containsIndexesInRange:(NSRange)indexRange

返回索引集合包含的索引數量

- (NSUInteger)count

返回indexRange中包含的索引數量

- (NSUInteger)countOfIndexesInRange:(NSRange)indexRange

枚舉NSIndexSet;執行Block操作,在指定的Rang範圍內,並使用指定的options方法。

- (void)enumerateIndexesInRange:(NSRange)range options:(NSEnumerationOptions)opts usingBlock:(void (^)(NSUInteger idx, BOOL *stop))block

如果,要枚舉的NSIndexSet中不存在Rang中所指定的範圍,則跳過。


options參數:

enum {

   NSEnumerationConcurrent = (1UL << 0),

   NSEnumerationReverse = (1UL << 1),

};

typedef NSUIntegerNSEnumerationOptions;


NSEnumerationConcurrent

枚舉過程中,各個Block是同時開始執行的。這樣枚舉的完成順序是不確定的。

NSEnumerationReverse

以反序方式枚舉。


例子:

// theTwo中是否包含theOne

    BOOL isContains1= [theTwo containsIndexes:theOne];

    BOOL isContains2= [theTwo containsIndex:1];

    BOOL isContains3= [theTwo containsIndex:9];

    // theTwo中是否包含指定的NSMakeRange

    BOOL isContains4= [theTwo containsIndexesInRange:NSMakeRange(0,5)];

    int theCount=[theTwo count];


// 遍歷theTwo,在指定的Range範圍內,執行Block方法,利用制定的options方式

    // 如果,theTwo中不存在Range中所指定的範圍,在theTwo中不存在,則跳過。

    [theTwo enumerateIndexesInRange:NSMakeRange(0,8)

                            options:NSEnumerationReverse

                         usingBlock:^(NSUInteger idx, BOOL*stop) {

                             NSLog(@"-------%d",idx);

                             NSLog(@"%@",theTwo);

}];

其他的方法,都差不多,就不一一介紹了!

希望對你有所幫助!

轉自:http://blog.sina.com.cn/s/blog_7b9d64af0101b851.html


5 圖片裁剪

IOS圖片裁剪和小圖看大圖動畫

http://www.cnblogs.com/liulunet/archive/2013/01/19/2866399.html

ios中實現圖片的裁剪

http://blog.sina.com.cn/s/blog_6084f58801013n34.html

IOS學習筆記39——拍照、從相冊選圖並對圖片進行裁剪

http://blog.163.com/l1_jun/blog/static/14386388201435020135/


6 如何判斷NSDictionary是否包含某個鍵

方法一:

if([[dictionary allKeys] containsObject:key) {

    // contains key

}


方法二:

if([dictionary objectForKey:key]) { 

    //objectForKey will return nil if a key doesn't exists.

    // contains key

}


7 NSData與UIImage之間的轉換

//NSData轉換爲UIImage

NSData *imageData = [NSData dataWithContentsOfFile: imagePath];

UIImage *image = [UIImage imageWithData: imageData];


//UIImage轉換爲NSData

 NSData *imageData = UIImagePNGRepresentation(aimae);

http://www.cnblogs.com/wxy325/archive/2013/03/06/2946971.html


8 IOS9適配 error itms-90163

http://blog.csdn.net/deadrabbit2015/article/details/48655513

    Xcode升級到7後,做了iOS9適配,發佈到app出現這樣的錯誤:


        初步判斷是因爲Xcode在打包的時候,把一些沒必要的包給打進去了(如果英文很厲害,那就直接自己翻譯哈),按照提示找到相應的key刪除該行即可(也有人說直接刪除對應的info.plist文件),個人覺得最好不要刪除那麼徹底萬一用到就麻煩了。如上圖,我的問題是TencentOpenApi_IOS_Bundle.bundle/Info.plist搞得鬼,如果找不到位置參考下圖:


    刪除錯誤提示的key(找不到對應的Core Foundation Keys?參考https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html)

如下圖:


好了,重新上傳就應該OK了!


9 【NSArray】 排序彙總

http://blog.csdn.net/xiaoxuan415315/article/details/9198729

IOS幾種簡單有效的數組排序方法

//第一種,利用數組的sortedArrayUsingComparator調用NSComparator ,obj1和obj2指的數組中的對象

NSComparator cmptr = ^(id obj1, id obj2){

    if ([obj1 integerValue] > [obj2 integerValue]) {

        return (NSComparisonResult)NSOrderedDescending;

    }


    if ([obj1 integerValue] < [obj2 integerValue]) {

        return (NSComparisonResult)NSOrderedAscending;

    }

    return (NSComparisonResult)NSOrderedSame;

};

NSArray *sortArray = [[NSArray alloc] initWithObjects: @"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];

//排序前

NSMutableString *outputBefore = [[NSMutableString alloc] init];

for (NSString *str in sortArray){

    [outputBefore appendFormat:@"];

}

NSLog(@"排序前:%@",outputBefore);

[outputBefore release];

//第一種排序

NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];

NSMutableString *outputAfter = [[NSMutableString alloc] init];

for(NSString *str in array){

    [outputAfter appendFormat:@"];

}

NSLog(@"排序後:%@",outputAfter);

[outputAfter release];

第二種 排序方法 利用sortedArrayUsingFunction調用 對應方法customSort,這個方法中的obj1obj2分別是指數組中的對象。

NSInteger customSort(id obj1, id obj2,void* context){

if ([obj1 integerValue] > [obj2 integerValue]) {

    return (NSComparisonResult)NSOrderedDescending;

}


if ([obj1 integerValue] < [obj2 integerValue]) {

    return (NSComparisonResult)NSOrderedAscending;

}

return (NSComparisonResult)NSOrderedSame;

}

NSArray *sortArray = [[NSArray alloc] initWithObjects: @"1",@"3",@"4",@"7", @"8",@"2",@"6", @"5",@"13",@"15", @"12",@"20",@"28",@"",nil];

//排序前

NSMutableString *outputBefore = [[NSMutableString alloc] init];

for(NSString *str in sortArray){

    [outputBefore appendFormat:@"];

}

NSLog(@"排序前:%@",outputBefore);

[outputBefore release];


NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];

NSMutableString *outputAfter = [[NSMutableString alloc] init];

for(NSString *str in array){

    [outputAfter appendFormat:@"];

}

NSLog(@"排序後:%@",outputAfter);

[outputAfter release];

第三種 利用sortUsingDescriptors調用NSSortDescriptor(簡便)

//做倒序排序

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey: @"commentEntity.addTime" ascending: YES];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];

[_commentVMArr sortUsingDescriptors:sortDescriptors];

    排序操作,NSArray提供了很多種方法,按照所利用的排序參數,可以簡單分爲descriptor,selector,function,和block排序。

    數組排序的時候有sortedArrayUsingComparator方法,這裏的參數爲NSComparator,這個類其實是Block所定義的typedef NSComparisonResult(^NSComparator)(id obj1,id obj2); 所以我們直接用NSComparatormyComparator=^(id obj1,id obj2){};

    Block其實可以看作JS裏面的(){}();方法以及.Net中的匿名方法,即不需要聲明就直接使用的方法,主要用處包括回調、事件處理和排序。聲明和實現可以分開,也可以寫在一起:

NSInteger (^blockExample)(int,NSString*)=^(int i,NSString *s)

{

    NSLog(@"%d,%@",i,s);

};

blockExample(42,@"hello");


對於NSArray排序或者其他需要Block作爲參數的函數來說,可以寫成下面兩種形式:

//聲明和使用

NSComparison ( ^ageComparator )( id, id ) = ^( id o1, id o2 ) {

    // 比較函數的實現

};

NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:ageComparator];

// 不聲明,徹底匿名使用

NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:^( id o1, id o2 ) { 

    //...

}];


例子:

NSArray    *array = [NSArray arrayWithObjects:@"71", @"16", @"51", @"104", @"13",@"2",@"1", nil];

array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {

    return (arc4random() % 3) - 1;

}];

// NSLog(@"array:%@", array);

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

    if ([obj1 integerValue] > [obj2 integerValue]) {

        return (NSComparisonResult)NSOrderedAscending;

    }


    if ([obj1 integerValue] < [obj2 integerValue]) {

        return (NSComparisonResult)NSOrderedDescending;

    }

    return (NSComparisonResult)NSOrderedSame;

}];

sortedArray 是排好序的時間對象數組

// 按時間排序

NSArray *sortedArray = [srcArrary sortedArrayUsingComparator:^(id obj1, id obj2)

{

    NSComparisonResult result = [obj1 compare:obj2];

    switch(result){

        case NSOrderedAscending:

            return NSOrderedDescending;

        case NSOrderedDescending:

            return NSOrderedAscending;

        case NSOrderedSame:

            return NSOrderedSame;

        default:

            return NSOrderedSame;

    } 

    // 時間從近到遠(遠近相對當前時間而言)

}];


//隨機排序

NSArray    *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];

array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {

    return (arc4random() % 3) - 1;

}];

    NSLog(@"array:%@", array);  

10 屏蔽表情輸入

    有朋友在詢問,如何屏蔽emoji表情輸入的問題,因爲蘋果自帶的表情在其他設備上不支持。 

    思路,在textfeild或者textview中,鍵入時候先判讀是不是emoji的內容,如果是,就不返回給編輯框。 代碼如下: 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string{

   DLog(@"[[UITextInputMode currentInputMode] primaryLanguage] is %@",);

   if ([[[UITextInputMode currentInputMode]primaryLanguage] isEqualToString:@"emoji"]) {

       returnNO;

    }

   returnYES;

}

11 MJRefresh初始化時崩潰


原因:


12 獲取iOS設備型號

獲取iOS設備型號(最新iPhone6+、iPad4)

http://www.oschina.net/code/snippet_2247606_39106

iOS獲取手機的型號,系統版本,軟件名稱,軟件版本

http://www.2cto.com/kf/201210/162333.html

//獲得設備型號

+ (NSString*)getCurrentDeviceModel:(UIViewController*)controller

{

    intmib[2];

    size_tlen;

    char*machine;

    mib[0] = CTL_HW;

    mib[1] = HW_MACHINE;

    sysctl(mib, 2, NULL, &len, NULL, 0);

    machine = malloc(len);

    sysctl(mib, 2, machine, &len, NULL, 0);

    NSString *platform = [NSString stringWithCString: machine encoding: NSASCIIStringEncoding];

    free(machine);

    if ([platformisEqualToString:@"iPhone1,1"]) 

        return @"iPhone 2G (A1203)";

    if ([platformisEqualToString:@"iPhone1,2"]) 

        return @"iPhone 3G (A1241/A1324)";

    if ([platformisEqualToString:@"iPhone2,1"]) 

        return @"iPhone 3GS (A1303/A1325)";

    if ([platformisEqualToString:@"iPhone3,1"])

        return @"iPhone 4 (A1332)";

    if ([platformisEqualToString:@"iPhone3,2"])

        return @"iPhone 4 (A1332)";

    if ([platformisEqualToString:@"iPhone3,3"])

        return @"iPhone 4 (A1349)";

    if ([platformisEqualToString:@"iPhone4,1"])

        return @"iPhone 4S (A1387/A1431)";

    if ([platformisEqualToString:@"iPhone5,1"])

        return @"iPhone 5 (A1428)";

    if ([platformisEqualToString:@"iPhone5,2"])

        return @"iPhone 5 (A1429/A1442)";

    if ([platformisEqualToString:@"iPhone5,3"])

        return @"iPhone 5c (A1456/A1532)";

    if ([platformisEqualToString:@"iPhone5,4"])

        return @"iPhone 5c (A1507/A1516/A1526/A1529)";

    if ([platformisEqualToString:@"iPhone6,1"])

        return @"iPhone 5s (A1453/A1533)";

    if ([platformisEqualToString:@"iPhone6,2"])

        return @"iPhone 5s (A1457/A1518/A1528/A1530)";

    if ([platformisEqualToString:@"iPhone7,1"])

        return @"iPhone 6 Plus (A1522/A1524)";

    if ([platformisEqualToString:@"iPhone7,2"])

        return @"iPhone 6 (A1549/A1586)";

    if ([platformisEqualToString:@"iPod1,1"])

        return @"iPod Touch 1G (A1213)";

    if ([platformisEqualToString:@"iPod2,1"])

        return @"iPod Touch 2G (A1288)";

    if ([platformisEqualToString:@"iPod3,1"])

        return @"iPod Touch 3G (A1318)";

    if ([platformisEqualToString:@"iPod4,1"])

        return @"iPod Touch 4G (A1367)";

    if ([platformisEqualToString:@"iPod5,1"])

        return @"iPod Touch 5G (A1421/A1509)";

    if ([platformisEqualToString:@"iPad1,1"])

        return @"iPad 1G (A1219/A1337)";

    if ([platformisEqualToString:@"iPad2,1"])

        return @"iPad 2 (A1395)";

    if ([platformisEqualToString:@"iPad2,2"])

        return @"iPad 2 (A1396)";

    if ([platformisEqualToString:@"iPad2,3"])

        return @"iPad 2 (A1397)";

    if ([platformisEqualToString:@"iPad2,4"])

        return @"iPad 2 (A1395+New Chip)";

    if ([platformisEqualToString:@"iPad2,5"])

        return @"iPad Mini 1G (A1432)";

    if ([platform isEqualToString:@"iPad2,6"])

        return @"iPad Mini 1G (A1454)";

    if ([platformisEqualToString:@"iPad2,7"])

        return @"iPad Mini 1G (A1455)";

    if ([platformisEqualToString:@"iPad3,1"])

        return @"iPad 3 (A1416)";

    if ([platformisEqualToString:@"iPad3,2"])

        return @"iPad 3 (A1403)";

    if ([platformisEqualToString:@"iPad3,3"])

        return @"iPad 3 (A1430)";

    if ([platformisEqualToString:@"iPad3,4"])

        return @"iPad 4 (A1458)";

    if ([platformisEqualToString:@"iPad3,5"]) 

        return @"iPad 4 (A1459)";

    if ([platformisEqualToString:@"iPad3,6"])

        return @"iPad 4 (A1460)";

    if ([platformisEqualToString:@"iPad4,1"])

        return @"iPad Air (A1474)";

    if ([platformisEqualToString:@"iPad4,2"])

        return @"iPad Air (A1475)";

    if ([platformisEqualToString:@"iPad4,3"]) 

        return @"iPad Air (A1476)";

    if ([platformisEqualToString:@"iPad4,4"]) 

        return @"iPad Mini 2G (A1489)";

    if ([platformisEqualToString:@"iPad4,5"])

        return @"iPad Mini 2G (A1490)";

    if ([platform isEqualToString:@"iPad4,6"]) 

        return @"iPad Mini 2G (A1491)";

    if ([platformisEqualToString:@"i386"])

        return @"iPhone Simulator";

    if ([platformisEqualToString:@"x86_64"])

        return @"iPhone Simulator";

    return platform;

}


13 iOS中Frame等struct類型的NSLog輸出格式

NSString *NSStringFromCGPoint( CGPoint point);

NSString *NSStringFromCGSize( CGSize size);

NSString *NSStringFromCGRect( CGRect rect);

NSString *NSStringFromCGAffineTransform( CGAffineTransform transform);

NSString *NSStringFromUIEdgeInsets( UIEdgeInsets insets);

NSString *NSStringFromUIOffset( UIOffset offset);


14 Catalog不應履行繼承職責,即儘量不要重寫源類繼承自基類的方法

    Catalog中如果重寫基類方法的話,即使其他地方沒有引用該類,系統照樣會執行進入Catalog類方法中,代碼超過了include類的執行範圍,容易造成不可預知的異常。


例如:

#import "UIScrollView+UITouch.h"


@implementationUIScrollView (UITouch)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event {

    [[self nextResponder] touchesBegan:touches withEvent:event];

    [super touchesBegan:touches withEvent:event];

}


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event {

    [[self nextResponder] touchesMoved:touches withEvent:event];

    [super touchesMoved:touches withEvent:event];

}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent*)event {

    [[self nextResponder] touchesEnded:touches withEvent:event];

    [super touchesEnded:touches withEvent:event];

}

@end

    雖然其他類中沒有引用UIScrollView+UITouch.h這個分類類,在觸發touch操作時,代碼依然會執行到這三個方法中來,因爲這個catalog相當於替源類UIScrollView實現了繼承的職責,實現了父類的touch方法。自然,就會執行到這個分類類中來,即使沒有顯式include這個catalog類。


15 【架構】單例完整寫法


16 #include實質

#include和#import本質上就是遞歸地複製和粘貼引用文件的內容


17 xcode修改scheme名稱

xcode修改scheme名稱

http://blog.csdn.net/xueer8835/article/details/19610099


18 報錯:process launch failed:failedto get the task for process XXX(解決方案)

報錯:

        processlaunch failed:failed to get the task for process XXX(解決方案)

http://blog.csdn.net/itianyi/article/details/8575154

原因:

    證書問題,project和targets的證書都必須是開發證書,ADHOC的證書會出現此問題。


解決方案:

    project和targets的證書使用開發證書。

其他:

failed to get the task for process XXX

This error happens when you have set DistributionProvisioning profile in code signing. Change it to Developer ProvisioningProfile, then it will work. Worked for me for Xcode SDK 4.5.

把你的code sign由Distribution改成Developer.就這麼簡單.


補充:

    iphone5s的時候會出現:processlaunch failed: security

    這時候,應該app其實已經安裝成功了,你只需要在iphone上啓動app,然後點擊信任就可以了。


19 #include 'openssl/rsa.h' file not found

#include 'openssl/rsa.h' file notfound

解決方案:

    1、確保Header Search Paths路徑正確;

    2、將路徑設置爲“recursive”

    3、移除引用,重新添加一遍;


20 #import 'leveldb/db.h' file not found

方案一

$(PROJECT_DIR)/framework/TKDataBase/leveldb


21 iOS開發中的Undefined symbols錯誤

iOS開發中的Undefinedsymbols錯誤

http://www.molotang.com/articles/1593.html

參考了StackOverflow一個帖子,寫的很全,這個錯誤可能的根源基本上是如下幾類:

    1、引入了需要用到的庫的頭文件,卻沒有鏈接正確的實現庫。因爲Xcode本身所支持的庫是Static Library,即.a的方式,.a的文件裏只有實現,使用的時候需要另外引入頭文件,那麼就有可能把頭文件放進來,沒有放.a或放入了錯誤的版本。

    2、Build Settings或者Build Phases配置有誤。檢查Build Phases裏的Link Binary With Libraries和Build Settings裏的幾項Search Path。

    3、從外部導入的文件沒有加入到特定的target中。這個正是我整理這篇日誌之前遇到的,將.a、.m、.framework等引入到工程當中,卻沒有勾選當前Build的target,會出現這個問題,可以選中特定的文件,在右側邊欄中選中target。

    4、未包含處理器架構指令集的問題。報錯時的提示一般都是“Undefined symbols for architecture

armv7”之類的,而“for architecture armv7”就是說沒有支持armv7,在Build settings裏architecture相關的幾項需要配置正確。

    有如上這幾種情況的時候,會出現“Undefined symbols”的報錯提示,這時候就要對提示中指出的特定symbol相關的文件仔細檢查了。


22 Xcode突然出現could not build modulefoundation錯誤

Xcode突然出現could notbuild module foundation錯誤

http://blog.csdn.net/zhuoyuetec/article/details/43525369

Adding C file causes pch error

http://stackoverflow.com/questions/19723392/adding-c-file-causes-pch-error

    Xcode6創建項目時並沒有.pch預編譯文件,如下圖添加預編譯文件


    在預編譯文件中添加若干頭文件引用後,出現could not build module foundation錯誤

解決方案:

       在引用頭文件開始加入#ifdef

__OBJC__ 結束時加入#endif,例如

#ifndef PureStandard_PrefixHeader_pch

#define PureStandard_PrefixHeader_pch


#ifdef __OBJC__

#import "A.h"

#import "B.h"

#endif

#endif


23 【編譯】There was an internal APIerror.

    xcode7更新之後使用真機調試,在IOS8的一臺Iphone5手機上面沒什麼問題,IOS8的一臺iphone6也沒問題。但是在IOS6的一臺Iphone4s和IOS7的ipad air2上面在最後安裝的時候居然安裝失敗,提示 There was an internal API error. 然後百度Google了一下,找到一下幾種可能或解決辦法:

    1.私有api的問題。

    2.product---clean一下,然後重新build一下,僅僅這樣問題就可能得到解決。-----然而我的問題卻沒有解決(我甚至關機再試過)

    3.部分人安裝了多個版本xcode,在刪除只保留一個版本之後重新build也好了--------然而我沒有安裝多個版本

    在糾結了快一天的時候 我發現console打印出的日誌顯示在安裝的app的名字是亂碼,通過查看build settings發現過product name改的是中文(解決方法)。然後抱着試試看的態度 把product

name改成原來的,和xcodeproj文件名一樣再重新build,終於沒問題了。

    在此提醒要修改app名字的時候最好不要修改product那麼,可以在info.plist中修改Bundle

display name.

http://blog.csdn.net/jf200614379/article/details/48624405


24 【上線】Xcode8打包上傳app,構建版本按鈕不顯示.

Xcode8打包上傳app,構建版本按鈕不顯示

http://blog.csdn.net/u013306324/article/details/52684076

[iOS Xcode8]上傳AppStore無法構建版本 沒有加號

http://blog.csdn.net/iostiannan/article/details/52636103

    需要在Info.plist的頂級目錄下配置需要開啓的系統權限,不然即使App上傳成功了,在構建版本一項中找不到。


25 ios接如微信SDK報錯'NSInvalidArgumentException', reason: '-[__NSArrayMenqueue:]:

    ios用ShareSDK接入微信SDK報錯'NSInvalidArgumentException', reason: '-[__NSArrayMenqueue:]:

解決方法:

    1.你的工程文件中選擇Build Setting,在"Other Linker Flags"中加入"-Objc",其中-ObjC的C要大寫。

    2.如果工程報錯"_GCControllerDidDisconnectNotification",項目->TARGETS->iOS->BuildPhases->Link Binary With Libraries

    增加庫:GameController.framework

    3.如果還報錯xx.dylib的問題的話,則找到剛剛添加的GameController.framework,右側Required改爲Opitional。


26 由於應用BundleID信息校驗不通過,無法分享到微信

http://bbs.umeng.com/thread-25696-1-1.html


    微信開放平臺裏面,應用的Bundle ID與測試版本Bundle ID都必須填寫,不然就會報這個錯。


27 app發佈,本地化存在錯誤。

    Api包沒問題,有可能是發佈時錯選了所支持語言導致,例如App只支持中文,但是多選了英文(美國)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章