当前位置:  编程技术>移动开发
本页文章导读:
    ▪objective-c的属性声明有关问题“ivar used by '@synthesize' declaration must be an existing iva”        objective-c的属性声明问题“ivar used by '@synthesize' declaration must be an existing iva”在GNU环境中,测试一段objective-c的代码。很简单一个数据类,定义了一些属性和一个初始化方法,如下所示: #impo.........
    ▪ 打包抓取网页信息的实例        封装抓取网页信息的实例......
    ▪ 向微信发送讯息       向微信发送消息 应用只需要进行一次注册就行了,然后在以后的使用中只需要封装消息,让通信类 发送即可。从前面的类图中可以看到,封装消息的顺序是首先生成需要发送的媒体 对象,.........

[1]objective-c的属性声明有关问题“ivar used by '@synthesize' declaration must be an existing iva”
    来源: 互联网  发布时间: 2014-02-18
objective-c的属性声明问题“ivar used by '@synthesize' declaration must be an existing iva”
在GNU环境中,测试一段objective-c的代码。很简单一个数据类,定义了一些属性和一个初始化方法,如下所示:

#import <Foundation/Foundation.h>

@interface CtripSign:NSObject
@property (nonatomic,copy) NSString * allianceID;
@property (nonatomic,copy) NSString * apiKey;
@property (nonatomic,copy) NSString * siteID;
@property (nonatomic,copy) NSNumber * timestamp;
@property (nonatomic,copy) NSString * requestType;
@property (nonatomic,copy) NSString * sign;
-(id)initWithallicanceID:(NSString *)allianceID apiKey:(NSString *)apiKey  siteID:(NSString *)siteID timestamp:(NSNumber *) timestamp requestType: (NSString *) requestType;
@end

#import "CtripSign.h"
#import "CtripDefine.h"
#import "NSString+Exts.h"

@implementation CtripSign
@synthesize allianceID=_allianceID;
@synthesize apiKey=_apiKey;
@synthesize siteID=_siteID;
@synthesize timestamp=_timestamp;
@synthesize requestType=_requestType;
@synthesize sign=_sign;

-(id)initWithallicanceID:(NSString *)allianceID apiKey:(NSString *)apiKey  siteID:(NSString *)siteID timestamp:(NSNumber *) timestamp requestType: (NSString *) requestType
{
    self = [super init];
    if (self) {
        _allianceID = allianceID;
        _apiKey = apiKey;
        _siteID = siteID;

        long long int timeStampNum=0;
        if (timestamp == nil)
        {
            // NSTimeInterval is defined as double
            timeStampNum = (long long int)[[NSDate date] timeIntervalSince1970];
            _timestamp=[NSNumber numberWithLongLong:timeStampNum];

        }
        else
        {
        _timestamp=timestamp;
        }

        _requestType=requestType;

        NSString *timestampStr=  [NSString stringWithFormat:@"%lld",timeStampNum];

        NSString *signatureCtrip=[timestampStr stringByAppendingString:allianceID];

        signatureCtrip=[signatureCtrip stringByAppendingString:[[_apiKey md5] uppercaseString]];
        signatureCtrip=[signatureCtrip stringByAppendingString:_siteID];
        signatureCtrip=[signatureCtrip stringByAppendingString:_requestType];

        signatureCtrip=[signatureCtrip md5];
        signatureCtrip=[signatureCtrip uppercaseString];

        _sign=signatureCtrip;

        return self;
    }
    return nil;
}

@end

这个类,我在apple机器上xcode4.5上调试是可以通过的,但是在gnu上调试却不行,报错如下:
E:\GNUStep\stanford2013\ctrip\CtripSign.m|16|error: ivar 'allianceID' used by '@synthesize' declaration must be an existing ivar|

我想,或许是版本问题,这个错误是说应该在CtripSign.h文件中应先添加变量声明。于是将CtripSign.h修改成这样
@interface CtripSign:NSObject
{
@property (nonatomic,copy) NSString * allianceID;
@property (nonatomic,copy) NSString * apiKey;
@property (nonatomic,copy) NSString * siteID;
@property (nonatomic,copy) NSNumber * timestamp;
@property (nonatomic,copy) NSString * requestType;
@property (nonatomic,copy) NSString * sign;
}
@property (nonatomic,copy) NSString * allianceID;
...........

@end

再编译,还是不过。后来想起来变量名称应该是以下划线开始,这才是类的私有变量的声明方式,而且我在类实现代码中就是这样调用的,如_allianceID

后来google到网友HoNooD的一文http://blog.csdn.net/g5dsk/article/details/6623099

他给出的解释是这样。

1、在 32-bit 时,如果类的 @interface 部分没有进行 ivar 声明,但有 @property 声明,在类的 @implementation 部分有相应的 @synthesize,则会得到类似下面的编译错误:  
Synthesized property 'xX' must either be named the same as a compatible ivar or must explicitly name an ivar  

2、在 64-bit时,运行时系统会自动给类添加 ivar,添加的 ivar 以一个下划线"_"做前缀。  
上面声明部分的 @synthesize window=_window; 意思是说,window 属性为 _window 实例变量合成访问器方法。  

我在xcode 4.5上编辑没问题,但在gnu上编译出错。前者是64-bit,而后者是一个PC机,32-bit。


    
[2] 打包抓取网页信息的实例
    来源: 互联网  发布时间: 2014-02-18
封装抓取网页信息的实例

  • package cn.mypic;  
  •   
  •   
  •     import java.io.BufferedInputStream;  
  •     import java.io.BufferedReader;  
  •     import java.io.File;  
  •     import java.io.FileNotFoundException;  
  •     import java.io.FileOutputStream;  
  •     import java.io.IOException;  
  •     import java.io.InputStreamReader;  
  •     import java.net.MalformedURLException;  
  •     import java.net.URL;  
  •     import java.util.regex.Matcher;  
  •     import java.util.regex.Pattern;  
  •   
  •   
  •     public class GetContentPicture {  
  •     //得到了图片地址并下载图片  
  •     public void getHtmlPicture(String httpUrl) {  
  •     URL url;  
  •     BufferedInputStream in;  
  •     FileOutputStream file;  
  •     int count;                      //图片文件名序号   
  •     FileNumber num=new FileNumber();//图片文件名序号类,num为对象  
  •     count=num.NumberReadFromFile();//获取图片文件序号  
  •     try {  
  •     System.out.println("获取网络图片");  
  •        String fileName = (String.valueOf(count)).concat(httpUrl.substring(httpUrl.lastIndexOf(".")));//图片文件序号加上图片的后缀名,后缀名用了String内的一个方法来获得  
  •         //httpUrl.substring(httpUrl.lastIndexOf("/"));//这样获得的文件名即是图片链接里图片的名字  
  •        String filePath = "d:/image/";//图片存储的位置  
  •        url = new URL(/blog_article/httpUrl/index.html);  
  •   
  •        in = new BufferedInputStream(url.openStream());  
  •   
  •        file = new FileOutputStream(new File(filePath+fileName));  
  •        int t;  
  •        while ((t = in.read()) != -1) {  
  •         file.write(t);  
  •        }  
  •        file.close();  
  •        in.close();  
  •        System.out.println("图片获取成功");  
  •        count=count+1;//图片文件序号加1  
  •        num.NumberWriteToFile(count);//将图片名序号保存  
  •     } catch (MalformedURLException e) {  
  •        e.printStackTrace();  
  •     } catch (FileNotFoundException e) {  
  •        e.printStackTrace();  
  •     } catch (IOException e) {  
  •        e.printStackTrace();  
  •     }  
  •     }  
  •   
  •     //获取网页的代码保存在String格式的Content中  
  •     public String getHtmlCode(String httpUrl) throws IOException {  
  •     String content ="";  
  •     URL uu = new URL(/blog_article/httpUrl/index.html); // 创建URL类对象  
  •     BufferedReader ii = new BufferedReader(new InputStreamReader(uu  
  •         .openStream())); // //使用openStream得到一输入流并由此构造一个BufferedReader对象  
  •     String input;  
  •     while ((input = ii.readLine()) != null) { // 建立读取循环,并判断是否有读取值  
  •        content += input;  
  •     }  
  •     ii.close();  
  •     return content;  
  •     }  
  •     //分析网页代码,找到匹配的网页图片地址  
  •     public void get(String url) throws IOException {  
  •   
  •     String searchImgReg = "(?x)(src|SRC|background|BACKGROUND)=('|\")/?(([\\w-]+/)*([\\w-]+\\.(jpg|JPG|png|PNG|gif|GIF)))('|\")";//用于在网页代码Content中查找匹配的图片链接。  
  •     String searchImgReg2 = "(?x)(src|SRC|background|BACKGROUND)=('|\")(http://([\\w-]+\\.)+[\\w-]+(:[0-9]+)*(/[\\w-]+)*(/[\\w-]+\\.(jpg|JPG|png|PNG|gif|GIF)))('|\")";  
  •   
  •     String content = this.getHtmlCode(url);//this指对象gcp,在此地调用获取网页代码,getHtmlCode方法  
  •     //System.out.println(content); //输出的content将是一个连续的字符串。  
  •   
  •     Pattern pattern = Pattern.compile(searchImgReg);//java.util.regex.Pattern  
  •     Matcher matcher = pattern.matcher(content);     //java.util.regex.Matcher  
  •     while (matcher.find()) {  
  •        System.out.println(matcher.group(3));//输出图片链接地址到屏幕  
  •     // System.out.println(url);  
  •        this.getHtmlPicture(matcher.group(3));//对象调用getHtmlPicture从网上下载并输出图片文件到指定目录  
  •   
  •     }  
  •   
  •     pattern = Pattern.compile(searchImgReg2);  
  •     matcher = pattern.matcher(content);  
  •     while (matcher.find()) {  
  •        System.out.println(matcher.group(3));  
  •        this.getHtmlPicture(matcher.group(3));  
  •   
  •     }  
  •     // searchImgReg =  
  •     // "(?x)(src|SRC|background|BACKGROUND)=('|\")/?(([\\w-]+/)*([\\w-]+\\.(jpg|JPG|png|PNG|gif|GIF)))('|\")";  
  •     }  
  •     //主函数url网页的地址  
  •     public static void main(String[] args) throws IOException {  
  •   
  •     String url = "http://www.baidu.com";  
  •     GetContentPicture gcp = new GetContentPicture();  
  •     gcp.get(url);  
  •       
  •   
  •     }  
  •   
  •   
  • }  
  •  

     

    Java代码  
  • package cn.mypic;  
  •   
  •     import java.io.*;  
  •   
  •     public class FileNumber{  
  •     //文件写  
  •     public void NumberWriteToFile(int x){  
  •        int c=0;  
  •        c=x;  
  •        File filePath=new File("d:/image");//文件名序号TXT文件保存地址  
  •        File f1=new File(filePath,"number.txt");  
  •        try{  
  •         FileOutputStream fout=new FileOutputStream(f1);  
  •         DataOutputStream out=new DataOutputStream(fout);  
  •         out.writeInt(c);  
  •          
  •        }  
  •        catch(FileNotFoundException e){  
  •         System.err.println(e);  
  •        }  
  •        catch(IOException e){  
  •         System.err.println(e);  
  •        }  
  •         
  •     }  
  •     //文件读  
  •     public int NumberReadFromFile(){  
  •        int c1 = 0;  
  •        File filePath=new File("d:/image");  
  •        File f1=new File(filePath,"number.txt");  
  •        try{  
  •         FileInputStream fin=new FileInputStream(f1);  
  •         DataInputStream in=new DataInputStream(fin);  
  •         c1=in.readInt();  
  •         System.out.println(c1);//输出文件内容至屏幕  
  •        }  
  •        catch(FileNotFoundException e){  
  •         System.err.println(e);  
  •        }  
  •        catch(IOException e){  
  •         System.err.println(e);  
  •        }  
  •        return c1;  
  •     }  
  •     public static void main(String args[]){  
  •         
  •     }  
  •   
  •   
  •   

  •     
    [3] 向微信发送讯息
        来源: 互联网  发布时间: 2014-02-18
    向微信发送消息

    应用只需要进行一次注册就行了,然后在以后的使用中只需要封装消息,让通信类

    发送即可。从前面的类图中可以看到,封装消息的顺序是首先生成需要发送的媒体

    对象,然后将媒体对象附加到消息对象中,接着建立请求对象,最后使用通信类发

    送即可。

    说明,本文是来自脚本之家,发到这里主要是分享一下,大家一起学习下。



        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    互联网 iis7站长之家
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3